通过模板渲染实现flask_jwt_extended

时间:2019-03-22 09:22:57

标签: python cookies flask jwt flask-jwt-extended

这一次(我创建了我需要的所有文件并且所有文件都顺利运行之后)再次尝试创建我的第一个flask应用程序,我试图使用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']

2 个答案:

答案 0 :(得分:2)

您可能想要:

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

答案 1 :(得分:0)

此外,如果JWT_ACCESS_COOKIE_PATH的路由错误,也会出现相同的错误。