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!')