Flask在重定向时返回JWT令牌

时间:2018-02-28 17:41:07

标签: python flask jwt pyjwt

我一直在关注this Flask pyjwt指南,但我的网络应用与使用render_template()redirect(url_for(...))进行导航的Miguel's microblog example有些相似。

我已在我的应用程序中实现了编码和解码服务,但是我不知道如何使用redirect()正确地将编码的JWT令牌返回给用户

我的代码如下:

@app.route('/', methods=['GET', 'POST'])
def login():
    login_form = LoginForm()
    username = login_form.username.data
    password = login_form.password.data

    if is_user_valid(username, password):
        return redirect(url_for('home'), auth_service.encode_token(username))
    render_template('login.html', form=login_form)

我的问题是将auth令牌放在重定向方法中导致页面显示为"重定向...您应该被重定向,如果没有点击这里",我不想要。我并不特别希望将我的重定向方法更改为类似于make_response(jsonify(...))的方法,因为当这是一个简单的登录页面时,我需要在前端处理这些响应。

我应该如何正确地将身份验证令牌返回给客户端?

1 个答案:

答案 0 :(得分:1)

通常,您将其附加到您的redirect方法返回的响应标头中。

response = redirect(url_for('home'))
response.headers['X-JWT-TOKEN'] = auth_service.encode_token(username)
return response

但是,我不确定使用render_template时这在您的设置中是否很有用,因为您无法轻松地在前端访问这些标头。

您在这里有两种选择:

  • 使您的登录端点成为API。这样,您可以为客户端代码返回令牌,以某种方式处理和存储令牌。
  • 删除JWT并坚持使用会话。我知道这不是您所期望的,但是在构建API之外,基于JWT的身份验证不是很有帮助。