如果选项卡已关闭且用户未注销,如何在 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
]
我正在做一个 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
]