繁体   English   中英

Django身份验证不保持用户登录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM