[英]login(request, user) function not working in django.contrib.auth
[英]authenticate() function not working django.contrib.auth
我有一個 login_page 函數,在這個函數中,只有當它是超級用戶時,authenticate() 函數才返回一個用戶對象。 對於普通用戶,它返回 None。 這不像文檔所說的那樣。
def login_page(request):
if request.user.is_authenticated(): # if user is already logged in
return HttpResponseRedirect('/') # SHOULD BE DASHBOARD
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
seo_specialist = authenticate(username=username, password=password) #returns None
if seo_specialist is not None:
login(request, seo_specialist)
return HttpResponseRedirect('/') # SHOULD BE DASHBOARD
else:
return render(request, 'login.html', {'form': form})
else:
return render(request, 'login.html', {'form': form})
else:
form = LoginForm()
context = {'form': form}
return render(request, 'login.html', context)
我的代碼有什么問題嗎?
試試這個:
def login_page(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
seo_specialist = authenticate(username=username, password=password)
if seo_specialist is not None:
return HttpResponse("Signed in")
else:
return HttpResponse("Not signed in")
else:
# takes you to sign in form.
基本上用 request.POST 替換 is_valid 和cleaned_data,然后進行身份驗證。 還要確保你有
from django.contrib.auth import authenticate
在您的意見的頂部。
這是來自 Django 文檔。 您似乎沒有通過 ...authenticate(request, user...) 中的請求
這個例子展示了如何同時使用 authenticate() 和 login():
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Redirect to a success page.
...
else:
# Return an 'invalid login' error message.
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.