Вопросы

Настройка заголовка авторизации — приложение 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')
Читать:
Ошибка при добавлении ролей реакции в discord.py

Похожие записи

Ошибка потока данных при предоставлении темы pubsub в качестве документа

admin

Форма редактирования встроенной таблицы livewire перестает отправлять запросы на сервер, когда она скрыта, и отображается только при нажатии кнопки редактирования

admin

Отображение другого курсора, когда пользователь наводит указатель мыши на конкретный элемент управления TreeNode элемента управления TreeView

admin

Загрузка пакета приложения завершилась ошибкой: EISDIR: недопустимая операция в каталоге (Elastic Beanstalk развертывает VSTS)

admin

Добавить новые столбцы с помощью настраиваемой функции с помощью mutate

admin

колба отправляет изображение в виде байтов с дополнительной информацией

admin