我正在开发电子邮件验证'模块。
首先,我有一个名为' SNUser'拥有一对一的'与默认'用户'的关系模型如下:
class SNUser(models.Model):
# Manager
objects = SNUserManager()
# Auth
user = models.OneToOneField(User, unique=True, primary_key=True)
我完成了发送包含用户唯一令牌的电子邮件。
单击链接时,我通过令牌搜索了正确的SNUser对象。(该令牌是SNUser模型的字段之一)。
所以我想要开发的是,当点击该令牌链接时,正确的用户可以在不登录的情况下使用该服务。
因此,当点击该链接时,'登录(请求,用户)'应该完成。
我已经尝试了两种解决方法。
当我从SNUser模型中检索用户模型并且登录(请求,用户)'直接:
snuser = SNUser.objects.get(token = key)
user = snuser.user
登录(请求,用户) 它导致错误:匿名用户。
我的目标是从我发送的链接中包含的令牌中检索用户,并使他/她使用不带登录模块的服务,因为许多服务都遵循此过程。
无论如何要解决这个问题?
谢谢!
****更新****
我在下面的情况下创建了不需要原始密码的自定义后端:
class SNUserEmailVerificationAuthBackend(ModelBackend):
def authenticate(self, username=None, email=None):
try:
return User.objects.get(username=username, email=email)
except User.DoesNotExist:
return None
def get_user(self, username):
try:
return User.objects.get(username=username)
except User.DoesNotExist:
return None
views.py中更新的关键代码如下:
snuser.is_email_verified = True
snuser.save()
user = snuser.user
manager=SNUserEmailVerificationAuthBackend()
new_user=manager.authenticate(username=user.username,email=user.email)
login(request,new_user)
登录(请求,new_user)
以上行正在运行(这意味着用户已登入登录)但同时出现错误:'用户' object没有属性' backend'
****删除重复标记****
答案 0 :(得分:0)
用'user.backend = None'解决了。
我指的是authenticate function in django using hashed password not the raw one
我希望任何推荐这篇文章的人都会有所帮助。