繁体   English   中英

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

[英]Manual activation of new user accounts in Django

我使用django-allauth创建了一个有效的“使用Facebook登录”设置。 但是,我希望allauth创建的那些新用户帐户不会被自动激活。

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

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

谢谢

您如何知道帐户是否已激活? 您的User模型中需要一些字段。

假设您的字段称为is_activated

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

就是这样。 该字段的默认值将为False ,这意味着默认情况下不会激活创建的用户。

然后,您可以将此字段添加到管理页面并从那里切换。

希望能帮助到你!

我建议采取以下措施,因为当我制作cogofly时,我遇到了一个巨大的问题,有些人(很少有人,但有些人这样做)有时单击“使用google登录”,有时单击“使用facebook登录”,这是相同的人! 因此,请谨慎使用此解决方案,它将帮助您避免此类问题。 唯一要记住的是: 所有社交网络只有一个主键:email

就像文档中写的一样 ,我将向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)

并建立一个社交登录模型,您可以在其中精确地确定用户的登录方式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM