Python Django:单击电子邮件中的激活链接后登录用户
我尝试在用户单击激活链接发送到用户电子邮件后登录用户。但是直接使用Python Django:单击电子邮件中的激活链接后登录用户,python,django,django-authentication,email-validation,activation,Python,Django,Django Authentication,Email Validation,Activation,我尝试在用户单击激活链接发送到用户电子邮件后登录用户。但是直接使用login()方法将抛出错误“User”对象没有属性“backend”。我已尝试使用authenticate()方法,但由于我需要使用已存储在后端的密码,authenticate(用户名、密码)不会返回任何用户 这是我的激活视图 def activate(request, uidb64, token): try: uid = force_text(urlsafe_base64_decode(uidb64))
login()
方法将抛出错误“User”对象没有属性“backend”
。我已尝试使用authenticate()
方法,但由于我需要使用已存储在后端的密码,authenticate(用户名、密码)
不会返回任何用户
这是我的激活视图
def activate(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
login(request, user)
return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
else:
return HttpResponse('Activation link is invalid!')
为了解决用户对象没有后端属性的问题,我使用了authenticate as:
username = user.username
password = user.password
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
未返回任何用户。有人能帮我吗
编辑:
我正在使用Django 1.8.11和python2.7
Traceback:
File "/home/sanip/naxa/source/fieldsight/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/sanip/naxa/source/fieldsight/onadata/apps/users/views.py" in activate
628. login(request, user)
File "/home/sanip/naxa/source/fieldsight/venv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login
112. request.session[BACKEND_SESSION_KEY] = user.backend
Exception Type: AttributeError at /users/activate/NjYx/53u-911ceda96c18c2e7dce1/
Exception Value: 'User' object has no attribute 'backend'
基本上,您需要在这里直接提供股票后端作为变量 请使用以下命令重试:
def activate(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
user.backend = 'django.contrib.auth.backends.ModelBackend' #<-- addition
login(request, user)
return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
else:
return HttpResponse('Activation link is invalid!')
def激活(请求、uidb64、令牌):
尝试:
uid=强制文本(urlsafe\u base64\u解码(uidb64))
user=user.objects.get(pk=uid)
除了(TypeError、ValueError、OverflowerError、User.DoesNotExist):
用户=无
如果用户不是None和帐户\u激活\u令牌。请检查\u令牌(用户,令牌):
user.is_active=True
user.save()
user.backend='django.contrib.auth.backends.modelbend'#发布您的用户模型和完整的回溯我已经使用了默认的django用户模型如果您正在使用,那么在解码uid64时会得到什么??我不认为它会给你的ID,你有保存用户在注册视图?你能不能在if form.is\u valid
行之后添加注册视图,而不是全部。添加后端直接解决了我的问题。非常感谢@ans2humanWelcome@Sanip,感谢您接受答案,并通过向上投票来表示进一步的支持。我很想向上投票,但我缺乏声誉。非常感谢,我将在能够向上投票后立即向上投票。