Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:单击电子邮件中的激活链接后登录用户_Python_Django_Django Authentication_Email Validation_Activation - Fatal编程技术网

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,感谢您接受答案,并通过向上投票来表示进一步的支持。我很想向上投票,但我缺乏声誉。非常感谢,我将在能够向上投票后立即向上投票。