[英]Django authenticate not keeping user logged in
我正在尝试通过设计基本的登录方案来学习Django的身份验证系统。 我的视图设置为使视图logIn
接收用户的凭据(并打印登录成功/失败),或呈现登录表单。
第二个视图privatePage
,被设计为用户实际登录的健全性检查。代码如下:
views.py
: @login_required(login_url='/logIn')
def privatePage(request):
return HttpResponse("You're viewing a private page")
@csrf_exempt
def logIn(request):
if request.method == "POST" and \
request.POST.get('email') and \
request.POST.get('password'):
user = authenticate(username=request.POST['email'],
password=request.POST['password'])
return HttpResponse('Valid login' if user is not None else 'Invalid login')
# render login form
return HttpResponse("<form>...</form>")
我发现在成功通过logIn
视图登录后,在尝试访问privatePage
时仍然重定向到登录视图。 仅供参考,我试图通过URL直接访问privatePage
视图,而不是通过提供的链接进行导航(例如,我不确定是否违反某些CSRF规则)。
知道发生了什么吗?
您实际上尚未登录。需要通过authenticate
用户的身份后登录该用户:
from django.contrib.auth import login
user = authenticate(email=email, password=password)
if user is not None:
login(request, user)
login
仅应用于已确认存在的用户。
authenticate
是:
验证用户是他们声称的身份
它不执行实际的登录 。
为了使用户保持登录状态,必须使用login()
方法向用户提供session
。 登录是为用户提供会话的过程, authenticate() verifies that the given credentials corresponds to an existing user model object in database
。 from django.contrib.auth import authenticate, login
导入django的内置登录和身份验证方法from django.contrib.auth import authenticate, login
。 然后你的代码看起来像
user =authenticate(email, password)
If user:
login(user, request)
希望能帮助到你 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.