配置了多个身份验证后端,因此必须提供“后端”参数或为用户设置“后端”属性

新手上路,请多包涵

首先,我是 django/python 的新手。

i am trying to create a login website that allows the user to register an account and verify via email or directly login via fbgoogleOauth

当我单击发送到 email 的验证 URL 时,我收到错误消息。

error

 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

我的网站/设置

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

i started receiving the error after adding the oath login via fb , google . if i remove’ social_core.backends.facebook.FacebookOAuth2 ‘,’ social_core.backends.google.GoogleOAuth2 ‘ from AUTHENTICATION_BACKENDS the email confirmation will work again.

我在网上搜索,也是在这里我找到的唯一解决方案如下,但它没有解决我的问题。

这里

原文由 gaby awad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 534
1 个回答

我找到了解决方案。调用 login() 后端参数如 login(request, user, backend='django.contrib.auth.backends.ModelBackend')

这是完整的代码:

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

原文由 gaby awad 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题