You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改fastapi_jwt_auth代码,将刷新令牌放入请求体刷新访问令牌?

修改方案

要实现通过请求体传递刷新令牌来刷新访问令牌,只需以下几步修改:

1. 定义请求体模型

先用Pydantic定义一个模型,用来接收请求体中的刷新令牌字段:

from pydantic import BaseModel

class RefreshTokenRequest(BaseModel):
    refresh_token: str

2. 修改接口逻辑

调整原接口,接收请求体模型,并手动验证传入的刷新令牌:

@router.post('/refresh-token')
def refresh(token_request: RefreshTokenRequest, authorize: AuthJWT = Depends()):
    try:
        # 手动验证传入的刷新令牌有效性,指定验证类型为refresh
        authorize.jwt_required("refresh", token=token_request.refresh_token)
        
        # 从传入的刷新令牌中解析用户subject
        current_user = authorize.get_jwt_subject(token=token_request.refresh_token)
        
        # 生成新的访问令牌
        new_access_token = authorize.create_access_token(subject=current_user)
        return {"access_token": new_access_token}
    except (JWTDecodeError, InvalidTokenError) as e:
        rex = ErrorResponse(error=1000, message="无效的刷新令牌")
        raise HTTPException(status_code=401, detail=rex.dict())
    except Exception as e:
        handleException(e)

关键修改点说明

  • 新增RefreshTokenRequest模型:FastAPI会自动解析JSON请求体,确保refresh_token字段存在且为字符串类型。
  • 手动传入令牌验证:替换默认的jwt_refresh_token_required()(默认从请求头取令牌),改用jwt_required("refresh", token=...)手动传入请求体中的令牌。
  • 指定令牌类型:通过"refresh"参数明确验证的是刷新令牌,避免和访问令牌混淆。
  • 解析subject时指定令牌:确保从传入的刷新令牌中获取用户信息,而非默认的请求头令牌。

内容的提问来源于stack exchange,提问作者Abrew Abraham Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:00:10