我用django-allauth创建了一个工作“使用facebook登录”设置。但是,我希望allauth创建的新用户帐户不会自动激活。
基本上我想从Django管理页面激活所有新帐户。
最佳实践解决方案是什么?
由于
答案 0 :(得分:1)
您如何知道帐户是否已激活?您需要User
模型中的某种字段。
我们假设您的字段名为is_activated
:
class User(BaseUser):
is_activated = models.BooleanField(default=False)
就是这样。此字段的默认值为False
,表示默认情况下未激活已创建的用户。
然后,您可以将此字段添加到管理页面并从那里切换。
希望它有所帮助!
答案 1 :(得分:1)
我建议接下来是因为当我cogofly时,我遇到了这个巨大的问题,有些人(很少但有些人会这样做)有时会点击"使用google"有时在"登录Facebook"这是同一个人!所以要小心,这个解决方案将帮助您避免这样的问题。唯一要记住的事情是:所有社交网络只有一个主键:电子邮件。
Like it's written in the documentation,我建立了OneToOne
模型的User
链接。
由此我建议:
像这样:
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)
制作一个社交登录模型,您可以精确地确定用户的登录方式:
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 '?')