fastapi权限控制

需要授权的是get_user_project这个函数

@router.get("/userProejct", summary="用户项目")
def get_user_project(current_user: str = Depends(get_current_user),name: str = "", username: str = "",page: int = Query(1),limit:int = Query(10)):
 

使用fastapi原生自带的AUTH_SCHEMA 作为权限控制

SECRET_KEY = "test22"
# 设置过期时间 现在时间 + 有效时间 示例5分钟 
expire = datetime.utcnow() + timedelta(minutes=5) # exp 是固定写法必须得传 sub和uid是自己存的值 
to_encode = {"exp": expire, "password": "123", "username": "tt"} # 生成token 
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm="HS256")
AUTH_SCHEMA = OAuth2PasswordBearer(tokenUrl="/login")

def get_current_user(token: str = Depends(AUTH_SCHEMA))->str:
    """认证当前用户"""
    try:
        decode_token=jwt.decode(token, SECRET_KEY, algorithms="HS256")
        username: str = decode_token.get("username")
        if username is None:
            raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="无效令牌")
    except JWTError:
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="无效认证凭证")
    return username

不过fastapi 的权限控制,他要在请求头header上"Authorization":“Bearer 你的token”.OAuth2PasswordBearer会自动解析请求头这个参数的内容,解析不到就报权限失败
这个用法是写死固定的。如果你的项目前端统一使用token作为header传参就比较麻烦了

所以我们就放弃原生的fastapi权限设置,用自己的权限控制
将get_current_user参数换成request: Request,这样就能控制我们只传入token就好了。也是比较简单的

#AUTH_SCHEMA = OAuth2PasswordBearer(tokenUrl="/login")
# decode_token=jwt.decode(encoded_jwt, SECRET_KEY, algorithms="HS256")

def get_current_user(request: Request)->str:
    """认证当前用户"""
    try:
        decode_token=jwt.decode(request.headers.get('token'), SECRET_KEY, algorithms="HS256")
        username: str = decode_token.get("username")
        if username is None:
            raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="用户不存在")
    except JWTError:
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="无效token")
    return username
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值