2017-10-01 1 views
0

django-allauth로 "페이스 북으로 로그인"작업을 만들었습니다. 그러나 allauth가 자동으로 활성화되지 않도록 만드는 새 사용자 계정을 원합니다.장고에서 새 사용자 계정 수동 활성화

기본적으로 장고 관리 페이지에서 모든 새 계정을 활성화하고 싶습니다.

이 문제에 대한 최선의 해결책은 무엇입니까?

감사합니다.

+1

내 최고의 조언은 사용자에게 사용자 정의 사용자 모델 (설명서를 참조) [https://docs.djangoproject.com/en/1.11/topics/auth/customizing/]하고있다 다음 (자습서) [https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html]이 방법에 대해 도움을 줄 수 있습니다. – deaspo

+0

감사합니다! 링크가 깨졌습니다. 오, 나는 그 괄호, 감사를 참조하십시오 – Daggepagge

+0

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html – deaspo

답변

1

계정이 활성화되었는지 여부를 어떻게 확인합니까? User 모델에 어떤 종류의 필드가 필요합니다.

class User(BaseUser): 
    is_activated = models.BooleanField(default=False) 

을하고 그것 뿐이다 :

의이 필드가 is_activated라고 가정 해 봅시다. 이 필드의 기본값은 False이며, 이는 작성된 사용자가 기본적으로 활성화되지 않음을 의미합니다.

그런 다음이 필드를 관리자 페이지에 추가하고 거기에서 토글 할 수 있습니다.

희망이 있습니다.

+0

고마워요! 따라서 사용자 모델을 확장해야합니다. 시원한. 내 템플릿에서 {% user.is_authenticated %}를 사용합니다. is_activated가 true로 설정되지 않은 모든 계정에서 "user.is_authenticated"가 "false"를 반환하도록하려면 어떻게해야합니까? 또는 "is_activated"도 확인하도록 모든 템플릿을 다시 작성해야합니까? 감사!! – Daggepagge

+1

@Daggepagge is_authenticated를 재정의 할 사용자 정의 권한 클래스를 만들어야합니다. 가장 쉬운 방법은 if ​​문을 {% if user.is_authenticated and user.is_activated %}로 변경하는 것입니다. –

1

내가 만들었을 때 cogofly을 만들었 기 때문에 일부 사람들 (소수지만 일부는 할 수 있음)이 "google과 함께 로그인"하고 때로는 "페이스 북으로 로그인"하고 이것은 같은 사람입니다! 따라서이 솔루션을 사용하면 이러한 문제를 피할 수 있습니다. 기억할 수있는 유일한 것 : 모든 소셜 네트워크에 기본 키가 하나만 있습니다. 이메일은입니다.

Like it's written in the documentation이면 User 모델에 대한 OneToOne 링크를 만듭니다. 이에서 나는이 제안 :

정확한
  • 정확한 처음 로그인 마지막 로그인이 같이
  • 정확한 계정이 확인 된 경우

의 날짜의 날짜 :

from django.contrib.auth.models import User 

class Person(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    is_activated = models.BooleanField(default=False) 

소셜 로그인 모델을 만들고 정확하게 사용자가 에 gged :

class SocialLogin(BaseModel): 
    S_GOOGLE = 1 
    S_FACEBOOK = 2 

    TAB_S_LOGIN = { 
     S_GOOGLE: _("Google"), 
     S_FACEBOOK: _("Facebook"), 
    } 
    logged_in = models.IntegerField(
     choices=[(a, b) for a, b in list(TAB_S_LOGIN.items())], 
     default=S_GOOGLE) 
    date_first_login = models.DateTimeField(auto_now_add=True, 
              verbose_name=_('First login')) 
    date_last_login = models.DateTimeField(auto_now=True, 
              verbose_name=_('Last login')) 
    person = models.OneToOneField(Person, on_delete=models.CASCADE) 

    def logged_in_desc(self): 
     return SocialLogin.TAB_S_LOGIN[self.logged_in] 

    def __str__(self): 
     return '{}/{}'.format(
      self.logged_in_desc(), 
      description if self.description is not None else '?') 
관련 문제