multiple authentication backends configured and therefore must provide the `backend` argument or set the `backend` attribute on the user
Solution 1
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')
Solution 2
So in my case I simply hadn't registered the user. Also did login(request, user, backend='django.contrib.auth.backends.ModelBackend')
To register user:
# register.py
from django.contrib.auth.models import User
cfg_user = 'user'
user = User.objects.create_user(username=cfg_user,
email='[email protected]',
password='password')
print('registered user '+cfg_user)
# register.sh
python manage.py shell < register.py
Solution 3
If you are using the build in django class PasswordResetConfirmView, then you can fix it by adding:
post_reset_login_backend = "django.contrib.auth.backends.RemoteUserBackend"
Something like so:
from django.contrib.auth import views
class PasswordResetConfirmView(views.PasswordResetConfirmView):
template_name = "reset_confirm.html"
success_url = "/"
post_reset_login = True
post_reset_login_backend = "django.contrib.auth.backends.RemoteUserBackend"
gaby awad
Updated on June 23, 2022Comments
-
gaby awad almost 2 years
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.
-
jartaud almost 3 yearsIn my case, I had to authenticate the user before calling login method.