我想使用Angular 6.x Web应用程序将龙卷风用作后端服务器。如果现在我向本地托管的服务器发送POST请求,则请求到达,但龙卷风答复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")
我绝对看到这根本不安全,但是在进一步的开发过程中会增加更多的安全性。这只是使所有内容正常工作的基本示例。
也许你们中的一个已经解决了这个问题,并且有解决方案,或者至少暗示了在哪里寻找。
答案 0 :(得分:0)
两件事:
_xsrf
的帖子请求参数,其值与Tornado设置的cookie相同。如何修复:
您需要做的是读取Tornado设置的cookie的值。 Cookie的名称为_xsrf
。
然后,在发送POST请求时,在表单数据中包含一个名为_xsrf
的字段,其中包含cookie的值。