Ранее установленные cookie-файлы запроса возвращают None в приложении Flask - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь сохранить токены JWT в файлах cookie для приложения Flask, чтобы ограничить некоторые конечные точки. Конечная точка, "/ authorize", отвечает за настройку файлов cookie, а затем перенаправляет страницу на конечную точку root, "/".

from flask      import Flask, request, make_response, redirect

@app.route("/authorize", methods=["GET"])
def authorize():
   token       = request.args.get('token')
   expires     = request.args.get('expires')

   # some code to validate the token

   resp_output = make_response(redirect("/"))
   resp_output.set_cookie("token", token, expires=expires)

   return resp_output

@app.route("/", methods=["GET"])
def index():
   token = request.cookies.get("token)

   # do something with the token 

Однако, когда я попытался развернуть это, я столкнулся с некоторыми проблемами с перенаправлением и поэтому должен изменить redirect("/") на redirect("https://someaddress.com/)", где https://someaddress.com/ - адрес flask применение. Теперь, когда я пытаюсь получить куки-файлы токенов в конечной точке root, он возвращает None. Я подозреваю, что это связано с тем, что перенаправление переходит от внутреннего к внешнему.

Пожалуйста, помогите мне найти обходной путь для этого. Или, если вы считаете, что я должен решить проблемы, которые приводят к переходу с внутреннего на внешнее перенаправление, чтобы я мог go вернуться к тому, что работает. (Если кто-нибудь может указать мне на некоторые ресурсы, объясняющие, как именно работает перенаправление, или, более конкретно, перенаправление Flask, я был бы очень признателен.)

1 Ответ

1 голос
/ 05 февраля 2020

Использование функции url_for из flask должно работать в вашем случае, так как она будет искать ссылку в контексте приложения:

from flask import Flask, request, make_response, redirect, url_for

@app.route("/authorize", methods=["GET"])
def authorize():
   token = request.args.get('token')
   expires = request.args.get('expires')

   # some code to validate the token

   resp_output = make_response(redirect(url_for('index')))
   resp_output.set_cookie("token", token, expires=expires)

   return resp_output

@app.route("/", methods=["GET"])
def index():
   token = request.cookies.get("token)

   # do something with the token

Кстати, я бы порекомендовал вам передать логин авторизации c для декоратора, посмотрите на авторизацию декораторов, используя flask.

В случае, если это не работает в производстве, это может быть некоторая настройка, связанная с вашим обратным прокси - как nginx файл Conf. Дайте мне знать, если это дело

для Nginx файла в папке с поддержкой сайтов etc/nginx/sites-enabled/<project-name>, прокомментируйте или удалите следующую строку:

proxy_set_header   Host                 $host;

Надеюсь, она вам подходит!

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