Flask jwt POST 数据到带有令牌的端点
Posted
技术标签:
【中文标题】Flask jwt POST 数据到带有令牌的端点【英文标题】:Flask jwt POST data to endpoint with a token 【发布时间】:2021-10-27 11:57:57 【问题描述】:这个 Flask 端点是我尝试在 POST 上使用 jwt 令牌来解决 Insomnia 的问题:
@app.route('/', methods=['POST'])
@token_required
def json_payloader():
try:
some code to do stuff...
无论我尝试什么,我都会在互联网上四处寻找:
"message": "Token is missing!"
承载认证令牌:
或将身份验证设置为 None 并且仅尝试使用令牌的标头这也会失败:
非常感谢任何提示尝试。
编辑 token_required
函数
from flask import Flask, request, jsonify
import flask
from flask.helpers import make_response
import jwt
from functools import wraps
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.args.get('token')
if not token:
return jsonify('message': 'Token is missing!'), 403
try:
data = jwt.decode(token, app.config['SECRET_KEY'])
except:
return jsonify('message': 'Token is invalid'), 403
return f(*args, **kwargs)
return decorated
【问题讨论】:
您能否说明token_required
是从哪里导入的?
我在帖子的编辑中添加了
似乎基本问题是您正试图从 args 中检索令牌,但它在标题中:flask.palletsprojects.com/en/2.0.x/api/#flask.Request.args
【参考方案1】:
除非您使用不同版本的 flask-jwt(或 flask-jwt-extended),否则我相信正确的函数装饰器是 @jwt_required()
【讨论】:
【参考方案2】:看来您正在使用 JWT。所以,要使用的正确装饰器是@jwt_required
。
请参阅https://flask-jwt-extended.readthedocs.io/en/stable/basic_usage/#basic-usage 中的示例。
@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
# Access the identity of the current user with get_jwt_identity
current_user = get_jwt_identity()
return jsonify(logged_in_as=current_user), 200
如果你想创建自己的实现,你可以像这样检索它
auth_header = request.headers.get("Bearer", "").strip().strip(",")
【讨论】:
以上是关于Flask jwt POST 数据到带有令牌的端点的主要内容,如果未能解决你的问题,请参考以下文章
发送带有承载令牌授权标头 (flask_restful + flask_jwt_extended) 的 GET 消息时出现“段不足”