[英]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
我的LoginTokenSchema
和ErrorResponse
架構定義為:
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.