отсутствует аргумент _xsrf в запросе Angular Post - PullRequest
0 голосов
/ 02 октября 2018

Я хочу использовать торнадо в качестве внутреннего сервера с помощью веб-приложения 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")

Я абсолютноОбратите внимание, что это совсем не безопасно, но при дальнейшей разработке будет добавлена ​​дополнительная безопасность.Это просто базовый пример того, как все работает.

Возможно, один из вас уже справился с этим и нашел решение или хотя бы подсказку, где его искать.

1 Ответ

0 голосов
/ 02 октября 2018

Две вещи:

  1. Вы пытаетесь установить файл cookie CSRF, тогда как Tornado - это файл, который уже установил файл cookie ранее.
  2. Когда вы отправляете форму, Tornado ожидает, что вы отправите поле формы или параметр запроса на публикацию с именем _xsrf, значение которого совпадает с размером файла cookie, установленным Tornado.

Как это исправить:

  1. Что вам нужно сделать, это прочитать значение cookie, установленное Tornado.Имя файла cookie будет _xsrf.

  2. Затем, когда вы отправляете запрос POST, включите поле с именем _xsrf со значением cookie в данные вашей формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...