Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

multiple authentication backends configured and therefore must provide the `backend` argument or set the `backend` attribute on the user

first of i am new to 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 fb or google(Oauth)

i receive the error when i click on the validation url sent to the email.

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 

mysite/settings

AUTHENTICATION_BACKENDS = (

 'social_core.backends.facebook.FacebookOAuth2',  'social_core.backends.google.GoogleOAuth2',   'django.contrib.auth.backends.ModelBackend', 

)

this is the function being called when i receive the error

    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.

i searched online and also here the only solution that i found was below but it didn't solve my problem.

here

like image 769
gaby awad Avatar asked Aug 30 '17 13:08

gaby awad


1 Answers

I found the solution. I had to add the backend to the function.

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') 
like image 191
gaby awad Avatar answered Sep 19 '22 14:09

gaby awad