Настройка заголовка авторизации — приложение Flask с использованием запросов Python и JWT

Я только учусь программировать, и это сводит меня с ума. Я не знаю, упускаю ли я что-то очень простое или совершенно не понимаю, как работает аутентификация (вполне возможно, и то, и другое), однако я был бы признателен за помощь.

Я создал маршрут входа в систему для своего флеш-приложения, которое отображает следующее и успешно позволяет пользователю войти в систему.

Страница входа

Если пользователь успешно входит в систему, я хочу установить заголовок авторизации, используя токен, созданный с помощью JWT. Я использую библиотеку запросов для этого и получаю ответ 200, но каждый раз, когда я проверяю вкладку сети, я не вижу токен в заголовке ответа «Авторизация».

Идея состоит в том, что после того, как этот заголовок установлен, я могу защитить свой apis, убедившись, что токен присутствует, а также использовать эту информацию, чтобы гарантировать, что API-интерфейсы возвращают данные только для этого пользователя, то есть расшифровывают токен для работы с пользователем.

Вкладка «Сеть» — без заголовка авторизации

Это мой текущий код. Где я ошибаюсь? Правильно ли звучит мой подход?

@loginsBlueprint.route(‘/login’, methods=[‘GET’, ‘POST’]) def login(): error = None if request.method == ‘POST’: user = User.query.filter_by(username=request.form[‘username’]).first() if user is not None and bcrypt.check_password_hash(user.password, request.form[‘password’]): token = jwt.encode( {‘user’: request.form[‘username’], ‘exp’: datetime.datetime.utcnow() + datetime.timedelta(seconds=15)}, app.config[‘SECRET_KEY’]) url = ‘https://127.0.0.1:5000/login’ headers = {‘Authorization’: ‘Bearer ‘ + token} requests.get(url, headers=headers) return render_template(‘landing_page.html’) else: return make_response(‘Could not verify’, 403, {‘WWW-Authenticate’: ‘Basic realm =»Wrong Password !!»‘}) return render_template(‘login.html’, error=error)

login.html

<html> <head> <title>Flask Intro — login page</title> <meta name=»viewport» content=»width=device-width, initial-scale=1.0″> <link href=»static/bootstrap.min.css» rel=»stylesheet» media=»screen»> </head> <body> <div class=»container»> <h1>Please login</h1> <br> <form action=»» method=»post»> <input type=»text» placeholder=»Username» name=»username» value=»{{ request.form.username }}»> <input type=»password» placeholder=»Password» name=»password» value=»{{ request.form.password }}»> <input class=»btn btn-default» type=»submit» value=»Login»> </form> {% if error %} <p class=»error»><strong>Error:</strong> {{ error }} {% endif %} </div> </body> </html>

Примечание. Я попытался перейти на requests.post, но получил 400:

127.0.0.1 — — [30/Mar/2021 21:53:29] «←[31m←[1mPOST /login HTTP/1.1←[0m» 400

Я подумал, что это может быть потому, что я использую CORS, и поэтому добавил это в:

CORS(app, expose_headers=’Authorization’)

Источник: ledsshop.ru

Стиль жизни - Здоровье!