реализация flask_jwt_extended с отрисовкой шаблонов - PullRequest
0 голосов
/ 22 марта 2019

Снова борюсь, пытаясь сделать мое первое приложение для колб, на этот раз (после того, как я создал все, что мне нужно, и все работает гладко) Я пытаюсь защитить некоторые конечные точки с помощью flask_jwt_extended, но я не могу найти, как работать с ними на моих страницах, документация в основном об отображении сообщений JSON, а в некоторых руководствах используется почтальон, а в моем случае я использую шаблоны HTML.
Например, пользователь отправляет свои учетные данные со страницы входа в систему на эту конечную точку:

@app.route('/login', methods=['POST'])
def UserLogin():
    data = parser.parse_args()
    current_user = UserModel.find_by_username(data['username'])
    if not current_user:
        return {'message': 'User {} doesn\'t exist'.format(data['username'])}

    if UserModel.verify_hash(data['password'], current_user.password):
        access_token = create_access_token(identity = data['username'])
        refresh_token = create_refresh_token(identity = data['username'])
        resp = jsonify({'login': True})         #I just added this line from the documentation
        set_access_cookies(resp, access_token)  # and this one
        set_refresh_cookies(resp, refresh_token) # and this one
        return redirect(url_for('results'))

    else:
        return {'message': 'Wrong credentials'}

и, конечно, я добавил в декоратор @jwt_required конечную точку results:

@app.route('/result',methods = ['POST','GET'])
@jwt_required
def results():
    temp={}
    if request.method == 'POST':
        # some code to fill temp with values
    return render_template('result.html',data=temp)

Итак, я получаю { "msg": "Missing cookie \"access_token_cookie\"" }
Очевидно, потому что я не отправляю jwt обратно, но если отправить его в операторе возврата, как я могу перенаправить пользователя на страницу, которую я хочу ??
И действительно Я использовал app.config['JWT_TOKEN_LOCATION'] = ['cookies']

1 Ответ

2 голосов
/ 23 марта 2019

Возможно, вы захотите:

resp = make_response(redirect(url_for('results')))
set_access_cookies(resp, access_token)
set_refresh_cookies(resp, refresh_token)
return resp

Не думаю, что вам нужна эта строка!-> resp = jsonify({'login': True})

Мне потребовалось некоторое время, чтобы понять это, не уверенный, почему эта часть не ясна в документах , большинство примеров там просто возвращает JSON напрямую

...