使用模板渲染实现 flask_jwt_extended

Posted

技术标签:

【中文标题】使用模板渲染实现 flask_jwt_extended【英文标题】:implementing flask_jwt_extended with templates rendering 【发布时间】:2019-08-13 06:04:07 【问题描述】:

再次尝试制作我的第一个烧瓶应用程序,这一次,(在我创建了所有我需要的并且一切顺利之后)我试图用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 发回,但如果在 return 语句中发送它,我该如何将用户重定向到我想要的页面??确实我用app.config['JWT_TOKEN_LOCATION'] = ['cookies']

【问题讨论】:

你能显示完整的请求吗(例如使用curl)? 我不明白你的意思,但是发送到登录端点的请求是从一个简单的基本表单(在 HTML 页面中)发送的。 【参考方案1】:

您可能想要:

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)

花了我一段时间才弄明白,不知道为什么这部分在docs中不清楚,那里的大多数示例只是直接返回JSON

【讨论】:

正是我要找的东西,事实上我们正在为这部分的文档苦苦挣扎,希望它尽快更新。【参考方案2】:

此外,如果 JWT_ACCESS_COOKIE_PATH 路由错误,您也会收到同样的错误。

【讨论】:

以上是关于使用模板渲染实现 flask_jwt_extended的主要内容,如果未能解决你的问题,请参考以下文章

Flask 学习-32.flask_jwt_extended 自定义装饰器

如何使用 Flask 和 flask_jwt_extended 进行自定义 JWT 验证?

Flask 学习-27.flask_jwt_extended插件学习current_user的使用

Flask 学习-30.flask_jwt_extended 自定义 token 过期返回内容

插件flask_jwt_extended

Django 渲染模板路径配置变量使用。