首页 文章

配置了多个身份验证后端,因此必须提供`backend`参数或在用户上设置`backend`属性

提问于
浏览
9

首先我是django / python的新手 .

我正在尝试创建一个登录网站,允许用户注册帐户并通过电子邮件验证或直接通过fb或谷歌登录(Oauth)

当我点击发送到电子邮件的验证网址时,我收到错误 .

错误:

ValueError at /activate/Mjk/4p1-dcc5f7ed2e7c847fe362/

You have multiple authentication backends configured and therefore must 

provide the `backend` argument or set the `backend` attribute on the user.

Request Method: GET

Request URL:    http://127.0.0.1:8000/activate/Mjk/4p1-dcc5f7ed2e7c847fe362/
Django Version: 1.11.3

Exception Type: ValueError

Exception Value:    

You have multiple authentication backends configured and therefore must provide the `backend` argument or set the `backend` attribute on the user.
Exception Location: /usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py in login, line 149
Python Executable:  /usr/bin/python
Python Version: 2.7.12
Python Path:    
['/home/gaby/django projects/simple-signup-master/profile-model',
 '/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0-py2.7.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/home/gaby/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
Server time:    Wed, 30 Aug 2017 12:34:31 +0000

mysite / settings

AUTHENTICATION_BACKENDS =(

'social_core.backends.facebook.FacebookOAuth2',
 'social_core.backends.google.GoogleOAuth2',

 'django.contrib.auth.backends.ModelBackend',

这是我收到错误时调用的函数

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.profile.email_confirmed = True
    user.save()
    login(request, user)
    return redirect('home')
else:
    return render(request, 'account_activation_invalid.html')

我通过fb,谷歌添加誓言登录后开始收到错误 . 如果我从AUTHENTICATION_BACKENDS中删除了“ofocial_core.backends.facebook.FacebookOAuth2”,“social_core.backends.google.GoogleOAuth2”,则电子邮件确认将再次有效 .

我在网上搜索,这里我发现的唯一解决方案是在下面,但它没有解决我的问题 .

here

2 回答

  • 5

    所以在我的情况下,我根本没有注册用户 . 也做了 login(request, user, backend='django.contrib.auth.backends.ModelBackend')

    注册用户:

    # register.py
    from django.contrib.auth.models import User
    cfg_user = 'user'
    user = User.objects.create_user(username=cfg_user,
                                     email='email@domain.com',
                                     password='password')
    print('registered user '+cfg_user)
    
    # register.sh
    python manage.py shell < register.py
    
  • 8

    我找到了解决方案 . 我不得不将后端添加到该函数中 .

    def activate(request, uidb64, token, backend='django.contrib.auth.backends.ModelBackend'):
        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.profile.email_confirmed = True
            user.save()
            login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            return redirect('home')
        else:
            return render(request, 'account_activation_invalid.html')
    

相关问题