不使用密码手动登录用户
我希望你能帮助我找到无需使用密码即可实现手动(服务器端启动)手动登录的最佳方法。让我解释一下工作流程:
- 用户注册
- 谢谢!带有激活链接的电子邮件已发送blablabla
- (帐户现已存在,但被标记为未启用)
- 用户打开电子邮件,单击链接
- (已启用帐户)
- 谢谢!你现在可以使用该网站
我要做的是在用户单击电子邮件链接后登录,以便他可以立即开始使用该网站。
我无法使用他的密码,因为该密码已在数据库中加密,这是编写自定义身份验证后端的唯一选择吗?
回答:
你不需要密码即可登录用户。该auth.login
功能仅需要一个User
对象,在启用帐户后,你大概已经从数据库中获取了该对象。因此,你可以将其直接传递给login
。
当然,你需要非常小心,用户无法欺骗到现有已启用帐户的链接,然后该链接将以该用户身份自动登录。
from django.contrib.auth import logindef activate_account(request, hash):
account = get_account_from_hash(hash)
if not account.is_active:
account.activate()
account.save()
user = account.user
login(request, user)
…等
编辑:
嗯,authenticate
因为它增加了额外的属性,所以没有注意到要使用的要求。查看代码,它所做的只是一个backend等同于身份验证后端模块路径的属性。因此,你可以伪造它-在上面的登录调用之前,执行以下操作:
user.backend = 'django.contrib.auth.backends.ModelBackend'
以上是 不使用密码手动登录用户 的全部内容, 来源链接: utcz.com/qa/421203.html