django - 登录期间导致 csrf_token 问题的 Django CustomMiddleware
问题描述
我一直在尝试实现这个逻辑:
每当用户注册并确认他的电子邮件时,他的帐户就处于活动状态。但是,为了让用户获得对网站的完全访问权限,他必须先输入一些关于他自己的数据。我称之为完整配置文件。
我认为制作中间件是实现逻辑的好方法。所以我写了以下内容:
class CompleteProfileMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
if request.path == "/account/" + request.user.username + '/complete-registration/':
pass
elif request.user.is_anonymous:
pass
elif request.user.is_superuser:
pass
elif request.user.student.complete_profile:
pass
elif not request.user.student.complete_profile:
return redirect('/account/' + request.user.username + '/complete-registration/')
# Code to be executed for each request/response after
# the view is called.
return response
但是,现在,要访问完整的个人资料页面,人们需要先登录。在登录过程中,它给出了 csrf 令牌的问题:Forbidden. CSRF verification failed. Request aborted.
如果我删除中间件,一切都会重新开始工作,所以问题就在这里。
这是登录模板:
<div class="main">
<section class="signup">
<div class="container">
<div class="row">
<div class="signup-content col-sm-12">
<form id="signup-form" class="signup-form" method="post" action="{% url 'login' %}">
{% csrf_token %}
<h2 class="form-title">Log In</h2>
{{ form | crispy}}
<input type="submit" style="margin-top: 10px" value="Login" class="button" id="" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
<div class="col-sm-12" style="text-align: right; margin-top: 5px">
<a href="{% url 'password_reset' %}">Forgot Password?</a>
</div>
<p class="loginhere">
New Here ? <a href="/account/register" class="loginhere-link">Create an account here</a>
</p>
</div>
</div>
</div>
</section>
</div>
解决方案
没有中间件一切正常吗?
您应该csrftoken
在 期间发送POST request
,可以使用 django 模板语言。您可以使用{% csrf_token %}
模板标签。
推荐阅读
- python - 使用 Python 从字符串中提取值
- typescript - 在观察者运行之前将 DOM.element 分配给模块变量
- sql - Restore Backups automatically using SQL Server
- angular - 类构造函数中未定义数组 obj 属性
- c# - 如何停止 Azure 广告身份验证注销询问您要注销哪个帐户?
- python-3.x - 使用真实进度条跟踪函数执行
- cognos - Concur / Cognos Report Studio:始终使用 timepropmt 值过滤时间范围选项?
- xml - 使用 Powershell 进行 XML 解析
- c# - 使用 C# 的非 WPF 或 Win32 应用程序的 UI 自动化
- javascript - javascript中require()函数的问题