我想使用 Angular 6.x Web 应用程序将 tornado 作为后端服务器。如果我现在向本地托管的服务器发送 POST 请求,请求会到达,但 tornado 会回复 403 打印以下内容:
'_xsrf' argument missing from POST
由于我不想关闭 xsfr cookie,我现在需要一个解决方案,如何使用 Angular 6 添加这个特定的参数HttpClient
。Angulars 官方文档仅声明,为所有请求设置了一个令牌。
有一个现已弃用的版本,它通过将以下内容添加到定义的提供程序列表中来工作app.module.ts
。然而,文档只是说看看新的HttpClient
,这不是很有帮助。
{
provide: XSRFStrategy,
useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')
}
后端 cookie 在登录时设置如下:
def post(self):
incorrect = self.get_secure_cookie("incorrect")
if incorrect and int(incorrect) > 10:
return
getusername = tornado.escape.xheml_escape(self.get_argument("username"))
getpassword = tornado.escape.xheml_escape(self.get_argument("password"))
print(getusername)
print(getpassword)
if getusername == "admin" and getpassword == "admin":
self.set_secure_cookie("user", self.get_argument("username"))
self.set_secure_cookie("incorrect", "0")
self.redirect(self.reverse_url("main"))
else:
incorrect = self.get_secure_cookie("incorrect") or 0
increased = str(int(incorrect) + 1)
self.set_secure_cookie("incorrect", increased)
self.write("Wrong username or password")
我绝对看到这根本不安全,但是在进一步的开发过程中会增加更多的安全性。这只是让所有东西正常工作的一个基本示例。
也许你们中的一个人已经解决了这个问题,并且有一个解决方案,或者至少暗示了在哪里寻找。