2

我一直在关注这个 Flask pyjwt指南,但是我的 web 应用程序有点类似于Miguel 的微博示例,它使用render_template()redirect(url_for(...))导航。

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

我的代码如下:

@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)

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

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

4

1 回答 1

2

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

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

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

您在这里有两种选择:

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