在Django中手动激活新用户帐户

时间:2017-10-01 19:58:55

标签: python django django-allauth

我用django-allauth创建了一个工作“使用facebook登录”设置。但是,我希望allauth创建的新用户帐户不会自动激活。

基本上我想从Django管理页面激活所有新帐户。

最佳实践解决方案是什么?

由于

2 个答案:

答案 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 '?')