django - Django 2.1.5 身份验证(登录/注销)在浏览器后退按钮上中断
问题描述
我使用开箱即用的 django LoginView 和 LogoutView 创建了一个简单的登录注销应用程序。在我的应用程序中,我可以使用 CreateView 进行注册,使用 ListView 列出用户并使用 DetailView 获取用户详细信息。
当我单击浏览器的后退按钮时,我看到登录和注销问题。问题:
登录后,我被重定向到索引页面。但是,当我单击后退按钮时,我会返回登录页面并可以使用其他有效用户登录。
注销后,我被重定向到索引页面。但是,当我单击返回按钮时,我可以查看登录数据,例如列表页面和详细信息页面。
我的应用程序(帐户)的代码是:
settings.py
<code>
LOGIN_REDIRECT_URL = "/accounts/"
LOGOUT_REDIRECT_URL = "/accounts/"
project urls.py
<code>
urlpatterns = [
path("admin/", admin.site.urls),
path("accounts/", include("django.contrib.auth.urls")),
path("accounts/", include("accounts.urls")),
]
app urls.py
<code>
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'accounts_app'
urlpatterns = [
path("", views.IndexPage_cview.as_view(), name="index_curl"),
path("login/", auth_views.LoginView.as_view(),name='login'),
path("logout/", auth_views.LogoutView.as_view(), name="logout"),
path("signup/", views.SignUp_cview.as_view(), name="signup_curl"),
path("super/", views.adminlist_cview.as_view(), name="super_curl"),
path("superdetail/<int:pk>", views.admindetail_cview.as_view(),
name="super_detail_curl"),
]
app views.py
<code>
from django.contrib.auth import login, logout
from django.urls import reverse_lazy
from django.views.generic import TemplateView,CreateView, ListView,
DetailView
from django.contrib import auth
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from . import forms
class IndexPage_cview(TemplateView):
template_name = "accounts/index.html"
class SignUp_cview(CreateView):
form_class = forms.UserCreate_cform
success_url = reverse_lazy("login") #redirect to /accounts/login/
template_name = "accounts/signup.html"
class adminlist_cview(LoginRequiredMixin,ListView):
template_name = 'accounts/super_list.html'
model= auth.models.User
def get_queryset(self):
return auth.models.User.objects.order_by('username')
class admindetail_cview(LoginRequiredMixin,DetailView):
template_name = 'accounts/super_detail.html'
model= auth.models.User
def get_object(self):
return get_object_or_404(auth.models.User, pk=self.kwargs.get("pk"))
app model.py
<code>
from django.contrib import auth
from django.db import models
class User_cmodel(auth.models.User):
def __str__(self):
return "@{}".format(self.username)
app form.py
<code>
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
class UserCreate_cform(UserCreationForm):
class Meta:
fields = ("username", "email", "password1", "password2")
model = get_user_model()
base.html
<div class="container">
<a href="{% url 'accounts_app:index_curl' %}">Home</a>
<ul >
{% if user.is_authenticated %}
{% if request.user.is_superuser %}
<li><a href="{% url 'admin:index' %}" >Admin</a></li>
<li><a href="{% url 'accounts_app:super_curl' %}>Db List</a></li>
{% endif %}
<li><a href="{% url 'accounts_app:logout' %}>Log out</a></li>
{% else %}
<li><a href="{% url 'accounts_app:login'%}" >Log in</a></li>
<li><a href="{% url 'accounts_app:signup_curl' %}">Sign up</a></li>
{% endif %}
</ul>
</div>
<div class="container mycontent">
{% block content %}
{% endblock %}
</div>
login.html
{% extends "base.html" %}
{% block content %}
<div class="container">
<h1>Login</h1>
<form method="POST" >
{% csrf_token %}
{% form %}
<input type="submit" value="Login" >
</form>
</div>
{% endblock %}
解决方案
在代码中的任何地方,您都在使视图仅对登录用户可用。任何人都可以访问您的所有视图。
如果您使用自定义 Auth 后端,您可以使用 django.contrib.auth.decorators 中的 @login_required 装饰器。确保用户在进入视图之前已登录。
你应该读这个。https://docs.djangoproject.com/en/2.1/topics/auth/default/#authenticating-users
推荐阅读
- node.js - 使用猫鼬 PUT 表达 api
- docker - 如何在我的情况下为容器网站设置 SSL(Apache2)
- r - 在 R 中使用“ODEmorris”函数进行敏感性分析时出错
- python - 将 whoosh 搜索引擎添加到本地 html 文件
- python - 在 PyTorch 中,如何在训练后完全释放模型的 gpu 内存并做其他事情
- html - 一次显示一个段落
- jquery - jQuery将变量与伪类结合起来
- python - 用 Python 编写 .csv 文件
- javascript - 我该如何使用
- 列出而不是
- flutter - 如何将新的小部件添加到 pdf/widgets 颤动