Django:单击电子邮件中的激活 link 后登录用户
Django: Login a user after clicking on the activation link from email
我尝试在用户点击激活后登录用户 link 发送到用户的电子邮件。但是直接使用login()
方法会给我报错'User' object has no attribute 'backend'
。我曾尝试使用 authenticate()
方法,但由于我需要使用已存储在后端的密码,因此 authenticate(username, password)
不会 return 任何用户。
这是我的激活视图
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!')
为了解决 User object has no attribute backend
的问题,我使用 authenticate as:
username = user.username
password = user.password
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
没有用户 returned。有人可以帮助我吗?
编辑:
我正在使用 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!')
我尝试在用户点击激活后登录用户 link 发送到用户的电子邮件。但是直接使用login()
方法会给我报错'User' object has no attribute 'backend'
。我曾尝试使用 authenticate()
方法,但由于我需要使用已存储在后端的密码,因此 authenticate(username, password)
不会 return 任何用户。
这是我的激活视图
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!')
为了解决 User object has no attribute backend
的问题,我使用 authenticate as:
username = user.username
password = user.password
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
没有用户 returned。有人可以帮助我吗?
编辑: 我正在使用 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!')