50
I found the solution. call login()
with backend argument like login(request, user, backend='django.contrib.auth.backends.ModelBackend')
here is full code:
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')
12
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@domain.com',
password='password')
print('registered user '+cfg_user)
# register.sh
python manage.py shell < register.py
- [Django]-How do you insert a template into another template?
- [Django]-Model form save. Get the saved object
- [Django]-How to change the Django admin filter to use a dropdown instead of list?
2
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"
- [Django]-Calling Django `reverse` in client-side Javascript
- [Django]-How to do a HTTP DELETE request with Requests library
- [Django]-How to access Django's field.choices?
1
If you set multiple authentication backends in settings.py
as shown below:
# "core/settings.py"
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"graphql_jwt.backends.JSONWebTokenBackend",
]
You need to set backend='django.contrib.auth.backends.ModelBackend'
to login()
in views.py
as shown below then the error will be solved:
# "account/views.py"
from django.shortcuts import render, redirect
from .forms import NewUserForm
from django.contrib.auth import login
from django.contrib import messages
def register_request(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save() # Here
login(request, user, backend='django.contrib.auth.backends.ModelBackend')
messages.success(request, "Registration successful.")
return redirect("account:homepage")
messages.error(request, "Unsuccessful registration. Invalid information.")
form = NewUserForm()
return render(request, "account/register.html", {"register_form":form})
In addition, when I set backend='graphql_jwt.backends.JSONWebTokenBackend'
to login()
in views.py
as shown below then the error was solved as well in my case so if you set one of multiple authentication backends, the error may be solved as well:
# "account/views.py"
from django.shortcuts import render, redirect
from .forms import NewUserForm
from django.contrib.auth import login
from django.contrib import messages
def register_request(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save() # Here
login(request, user, backend='graphql_jwt.backends.JSONWebTokenBackend')
messages.success(request, "Registration successful." )
return redirect("account:homepage")
messages.error(request, "Unsuccessful registration. Invalid information.")
form = NewUserForm()
return render(request, "account/register.html", {"register_form":form})
And, if you set only one "django.contrib.auth.backends.ModelBackend"
to AUTHENTICATION_BACKENDS
as shown below:
# "core/settings.py"
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
]
Or, if you donβt explicitly set AUTHENTICATION_BACKENDS
itself in settings.py
as shown below:
# "core/settings.py"
# AUTHENTICATION_BACKENDS = [
# "django.contrib.auth.backends.ModelBackend",
# ]
You donβt need to set backend='django.contrib.auth.backends.ModelBackend'
to login()
in views.py
because "django.contrib.auth.backends.ModelBackend"
is set automatically.
- [Django]-Django REST Framework and FileField absolute url
- [Django]-How can I have two foreign keys to the same model in Django?
- [Django]-Programmatically create a django group with permissions
0
In my case just simple assigning some of backend class from Django configuration to user work properly:
setattr(user, 'backend', 'django.contrib.auth.backends.RemoteUserBackend')
and then you can authenticate your user
- [Django]-Update multiple objects at once in Django?
- [Django]-Django Test Client Method Override Header
- [Django]-Django applying a style class based on a conditional
0
As suggested here you need to set the backend of the user record. Before login(request, user)
add the following line:
user.backend = 'django.contrib.auth.backends.ModelBackend'
...
login(request, user)
- [Django]-Django rest framework β how do you flatten nested data?
- [Django]-Django data migration when changing a field to ManyToMany
- [Django]-How to customize default auth login form in Django?