[英]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.