tout d'abord, je suis nouveau sur Django/python.
j'essaie de créer un site Web de connexion permettant à l'utilisateur de créer un compte et de le vérifier par courrier électronique ou directement via fb ou google (Oauth).
je reçois le message d'erreur lorsque je clique sur l'URL de validation envoyée à l'email.
erreur:
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')
j'ai commencé à recevoir l'erreur après avoir ajouté le login de serment via fb, google . si je supprime 'social_core.backends.facebook.FacebookOAuth2', 'social_core.backends.google.GoogleOAuth2' de AUTHENTICATION_BACKENDS, la confirmation par courrier électronique fonctionne à nouveau.
j'ai cherché en ligne et ici aussi la seule solution que j'ai trouvée était ci-dessous mais cela n'a pas résolu mon problème.
Donc, dans mon cas, je n'avais tout simplement pas enregistré l'utilisateur. Aussi login(request, user, backend='Django.contrib.auth.backends.ModelBackend')
Pour enregistrer un utilisateur:
# 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
J'ai trouvé la solution. Je devais ajouter le backend à la fonction.
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')