簡體   English   中英

Flask-smorest 返回一個空的 json 字符串

[英]Flask-smorest returning an empty json string

即使我正在記錄正確的數據,我端點的 JSON 響應也會返回{}

from flask_smorest import Blueprint

bp = Blueprint("auth", __name__, url_prefix="/api/v1/auth/")


@bp.route("/login", methods=["POST"])
@bp.arguments(LoginRequest)
@bp.response(200, JwtTokenResponse)
@bp.response(404, ErrorResponse)
def login(args):
    current_app.logger.debug(args)
    username = args.get("username", None)
    password = args.get("password", None)
    current_app.logger.debug(f"Username: {username}")
    current_app.logger.debug(f"Password: {password}")

    user = User.query.filter_by(username=username).first()
    if user is None:
        return dict(message="User does not exists"), 404
    if not check_password_hash(user.password, password):
        return dict(message="Unable to Authenticate user."), 404

    access_token = create_access_token(identity=username)
    refresh_token = create_refresh_token(identity=username)
    response = dict(access_token=access_token, refresh_token=refresh_token)
    current_app.logger.debug(f"Response: {response}")
    return response, 200

我的LoginTokenSchemaErrorResponse架構定義為:

from marshmallow import Schema, fields

class JwtTokenResponse(Schema):
    access_token = fields.String()
    refresh_token = fields.String()

class ErrorResponse(Schema):
    message = fields.String()

當我使用不在數據庫中的用戶或使用錯誤的密碼測試 API 時; 它將使用ErrorRespose產生正確的響應但是使用正確的信用它只會輸出{} ,當我檢查燒瓶日志時我可以看到訪問/刷新令牌字典,我做錯了什么?

您不需要調用Blueprint.response兩次,這是我在問題中所做的。 您可以使用自定義錯誤消息調用alt_response或僅使用abort並讓flask-smorest處理其余部分。

@bp.route("/login", methods=["POST"])
@bp.arguments(LoginRequest)
@bp.response(200, SmorestJWTTokenResponse)
def login(args):
    current_app.logger.debug(args)
    username = args.get("username", None)
    password = args.get("password", None)

    user = User.query.filter_by(username=username).first()
    if user is None:
        abort(404, message="User does not exists.")
    if not check_password_hash(user.password, password):
        abort(404, message="Unable to Authenticate user.")

    access_token = create_access_token(identity=username)
    refresh_token = create_refresh_token(identity=username)
    return dict(access_token=access_token, refresh_token=refresh_token), 200

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM