如果选项卡已关闭且用户未注销,如何在 Django 中自动登录用户?

How to auto login a user in django if the tab was closed and he wasn't logged out?

我正在做一个 Django 项目。我有一个后端(Django)和前端(HTML、CSS、JS)。 一切都按预期工作,如登录、注册、注销等。 但是,一个要求,我知道这是一个很常见的要求,如果在用户登录后选项卡关闭(他没有注销),并且用户重新打开 url 登录,他应该被带走到仪表板,而不是再次在登录屏幕上询问登录凭据。

我尝试了什么?

我看到了一些其他答案,并尝试将此检查放在我页面的“登录/”url 中:

request.user.is_authenticated

如果我将此检查放在登录页面上,它总是给出 false。我将它放在登录页面的 Get 方法中,因为我希望如果用户已登录并且他尝试转到登录 url,他将被重定向到仪表板。但它总是给出 False。

我需要什么帮助?

如果有人能指导我如何实现上述目标,那就太好了objective。

登录时有一个令牌传递给前端,它存储在 cookie 中。在您的情况下,如果您在关闭浏览器选项卡后注销,则意味着您无法将令牌存储在浏览器中。 如评论中所述,尝试使用会话或实施身份验证系统Simple JWT

最好的方法是使用 cookie。 例如,您可以创建一个 cookie 并在每次登录时将值设置为 true。 这可以完成为(views.py):

from django.shortcuts import render  
from django.http import HttpResponse  
  
def setcookie(request):  
    response = HttpResponse("Cookie Set")  
    response.set_cookie('isloggedin', True)  
    return response  
def getcookie(request):  
    loggedin = request.COOKIES['isloggedin]  
    return HttpResponse("Login: " +  loggedin); 

在我看来,最好的 max_age 是一天。 还要在 urls.py 中进行这些更改:

from django.contrib import admin  
from django.urls import path  
from myapp import views  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('index/', views.index),  
    path('scookie',views.setcookie), #this
    path('gcookie',views.getcookie)  #and this
]  

参考:https://www.javatpoint.com/django-cookie