繁体   English   中英

Django 403 CSRF验证失败

[英]Django 403 CSRF Verification Failed

我正在为我的学校写一个注册网站,并使用Django作为框架。 对于注册,我需要用户名,密码和注册令牌。 那些还没有得到验证,我现在正试图做的就是从注册输入页面(使用POST请求)到“你已经成功注册”页面。 沿着这条线的某个地方,csrf令牌显然拒绝被验证。

我的观点:

def register(request):
    return render(request, 'enroller/successfulEnroll.html')

我的页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{% url 'register' %}" method="post"> {% csrf_token %}
    <div class="container">
        <label><b>New Username</b></label>
        <input type="text" placeholder="Username" name="uname" required>
        <br>
        <label><b>Password</b></label>
        <input type="password" placeholder="Password" name="psw" required>
        <br>
        <label><b>Registration Password</b></label>
        <input type="text" placeholder="Registration Key" name="reg" required>
        <br>
        <input type="submit" value="Register" />
    </div>
    </form>
</body>
</html>

当我尝试从注册页面转到成功页面时,它给出了错误403(CSRF验证失败。请求中止)。 但是,当我尝试访问url mysite.com/register/时,它会返回我请求的页面而没有错误。

有没有什么办法解决这一问题? 我一直在看RequestContext,但我不完全确定它将在何处使用。

得到它的工作。 Daniel是对的 - 这是我的中间件配置的问题。 我在settings.py中的中间件数组之前添加了两行,并且它突然起作用了。

SESSION_COOKIE_SECURE = True
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

我不能说我完全确定它为什么会起作用,或者问题究竟是什么,但它现在有效。 谢谢Daniel!

也许你可以使用这种方法。 而djang版本是1.11.1

from django.shortcuts import render
from django.template.context_processors import csrf

form = LoginForm()
c = {'form': form}
c.update(csrf(request))
return render(request, 'a_template.html', c)

我在http://djangobook.com/security-in-django/找到了这种方法
对我来说,工作正常,但不是最好的,因为不仅仅是一条线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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