我希望你能帮助我找到无需使用密码即可实现手动(服务器端启动)手动登录的最佳方法。让我解释一下工作流程:
我无法使用他的密码,因为该密码已在数据库中加密,这是编写自定义身份验证后端的唯一选择吗?
你不需要密码即可登录用户。该auth.login功能仅需要一个User对象,在启用帐户后,你大概已经从数据库中获取了该对象。因此,你可以将其直接传递给login。
auth.login
User
login
当然,你需要非常小心,用户无法欺骗到现有已启用帐户的链接,然后该链接将以该用户身份自动登录。
from django.contrib.auth import login def 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等同于身份验证后端模块路径的属性。因此,你可以伪造它-在上面的登录调用之前,执行以下操作:
authenticate
user.backend = 'django.contrib.auth.backends.ModelBackend'