Angularjs 禁止(403)CSRF验证失败。请求被中止。Django+;安格拉斯
我正在运行Django v1.10.8项目。我有一个表单是用AngularJSV1.5.6处理的。我已经将该项目放在一个使用SSL的远程服务器上,在HTTPS上运行 当我尝试提交我的自定义登录表单时,我会遇到以下错误: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
禁止(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 %}