Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 禁止(403)CSRF验证失败。请求被中止。Django+;安格拉斯_Angularjs_Django_Csrf - Fatal编程技术网

Angularjs 禁止(403)CSRF验证失败。请求被中止。Django+;安格拉斯

Angularjs 禁止(403)CSRF验证失败。请求被中止。Django+;安格拉斯,angularjs,django,csrf,Angularjs,Django,Csrf,我正在运行Django v1.10.8项目。我有一个表单是用AngularJSV1.5.6处理的。我已经将该项目放在一个使用SSL的远程服务器上,在HTTPS上运行 当我尝试提交我的自定义登录表单时,我会遇到以下错误:禁止(403) CSRF验证失败。请求中止。 login\u register.html此处的登录表单: <div ng-app="app" ng-controller="Ctrl"> <form method="post" name="loginForm" ng

我正在运行Django v1.10.8项目。我有一个表单是用AngularJSV1.5.6处理的。我已经将该项目放在一个使用SSL的远程服务器上,在HTTPS上运行

当我尝试提交我的自定义登录表单时,我会遇到以下错误:
禁止(403)
CSRF验证失败。请求中止。

login\u register.html
此处的登录表单:

<div ng-app="app" ng-controller="Ctrl">
<form method="post" name="loginForm" ng-submit="login()">
    <fieldset ng-disabled="submittingForm">
        <p>
            <input 
                id="{{ login_form.username.id_for_label }}"
                type="email" 
                name="{{ login_form.username.html_name }}"
                placeholder="Email"
                ng-model="login.email"
                required>
        </p>
        <p>
                <input 
                    class="form-control" 
                    id="{{ login_form.password.id_for_label }}" 
                    name="{{ login_form.password.html_name }}"
                    placeholder="{% trans 'Password (8+ characters)' %}"
                    type="[[[ login.showPW ? 'text' : 'password' ]]]" 
                    ng-minlength="{{ min_pw_length }}" 
                    ng-maxlength="{{ max_pw_length }}" 
                    ng-model="login.pw"
                    required 
                >               
        </p>
        <button class="btn btn-primary" type="submit" ng-disabled="!login.email || !login.pw">{% trans "Log in" %}</button>
    </fieldset>
</form>
</div>
下面是我的
本地设置.py
的摘录:

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
X_FRAME_OPTIONS = "DENY"
SECURE_HSTS_SECONDS = 60
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_SSL_REDIRECT = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True

为什么尽管在JS中设置了CSRF标记,我还是会出现403错误?

除非我大错特错,而且因为我对角度几乎一无所知,所以很可能我是,实际上您从未在Javascript中设置过实际的标记。您设置了cookie,但没有将令牌的值放入其中。您可以使用
{{csrf_-token}
在HTML中访问令牌的原始值

如果我不正确,那么也有可能您没有使用HTTPS访问页面,这可能是因为您设置了
CSRF\u COOKIE\u SECURE=True

表单标记后应该有一个令牌

<form method="post" name="loginForm" ng-submit="login()">
{% csrf_token %}

{%csrf_令牌%}
<form method="post" name="loginForm" ng-submit="login()">
{% csrf_token %}