你不需要密码即可登录用户。该
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'



