【发布时间】:2017-10-15 17:37:57
【问题描述】:
我正在使用 flask-jwt-extended 库通过以下途径为 API 提供授权:
@app.route('/<string:stage>/api/v2.0/unauth/token', methods=['POST'])
def get_token(stage):
username = request.json['username']
password = request.json['password']
user = get_user(username)
if user and user.password == password:
return jsonify({'access_token': create_access_token(identity=username)}), 200
else:
abort(401)
当我发出以下 CURL 请求时
curl -H "Content-Type: application/json" -X POST -d '{"username":"android", "password":"59a07c1a-0ec9-41a0-9b96-2ff196f35f0c"}' http://0.0.0.0:5000/staging/api/v2.0/unauth/token
服务器响应
{
"msg": "Missing Authorization Header"
}
尽管get_token 函数上没有jwt_required 注释。我知道传递给请求的用户名和密码是有效的,get_user 调用返回的对象是有效的,其他非 jwt_required-annotated 和 jwt_required-annotated 路由按预期工作。我尝试重命名端点,甚至将其在代码中移动到不同的位置,但无济于事。如何解决这个问题?
【问题讨论】:
-
您确定没有其他路线符合您的要求吗?
-
我是。搜索
token只会调出此功能,更改路线名称也不能解决问题。 -
仅此一点并不能证明太多,因为它可以被解释为一个论点。我建议在
flask shell中运行app.url_map.match("/staging/api/v2.0/unauth/token", method="POST")并查看它的结果。 -
附带说明,您绝对不应该存储纯文本密码。
-
您是否在使用任何其他可能正在添加或处理路由的烧瓶扩展? (烧瓶不安,那种东西)