【问题标题】:Flask jwt POST data to endpoint with a tokenFlask jwt POST 数据到带有令牌的端点
【发布时间】: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

【问题讨论】:

标签: python authentication flask python-requests jwt


【解决方案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(",")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2016-03-06
      • 2022-11-15
      • 2020-05-17
      • 2023-02-01
      • 2019-07-09
      • 2022-10-24
      相关资源
      最近更新 更多