Я хочу использовать торнадо в качестве внутреннего сервера с помощью веб-приложения Angular 6.x.Если я сейчас отправлю запрос POST на мой сервер, размещенный локально, запрос поступит, но торнадо ответит 403, напечатав следующее:
'_xsrf' argument missing from POST
Поскольку я не хочу отключать файлы cookie xsfr, мне теперь нужноРешение, как добавить этот конкретный аргумент, используя Angular 6 HttpClient
.Официальные документы Angulars только утверждают, что токен установлен для всех запросов.
Существует устаревшая версия, которая работала, добавив следующее в список поставщиков, определенных в app.module.ts
.Однако в документах просто говорится о том, чтобы посмотреть на новую HttpClient
, которая была не совсем полезна.
{
provide: XSRFStrategy,
useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')
}
Бэкенд-куки настроены при входе в систему следующим образом:
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")
Я абсолютноОбратите внимание, что это совсем не безопасно, но при дальнейшей разработке будет добавлена дополнительная безопасность.Это просто базовый пример того, как все работает.
Возможно, один из вас уже справился с этим и нашел решение или хотя бы подсказку, где его искать.