创新实训记录(七)

前言

本篇博客记录接口拦截器的实现效果。

流程

对token进一步优化,满足以下需求:

​ 1.普通用户无法访问管理员的接口。

​ 2.只有账号正常且登陆成功的用户才可以访问用户接口。

​ 3.对管理员和普通用户做进一步的区分。

用户产生token:

access_token = create_access_token(
            data={"sub": user.email, "index": 0}, expires_delta=access_token_expires  # index索引是0代表用户,1代表管理员
        )

管理员产生token:

 access_token = create_access_token(
        data={"sub": admin.id, "index": 1}, expires_delta=access_token_expires  # index索引是0代表用户,1代表管理员
    )

用户与管理员都使用相同的方法产生token,只是token产生的依据不一样。用户是邮箱+用户标志;管理员是id+管理员标志

管理员验证逻辑:

async def get_admin(token: str = Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload = jwt.decode(token, JWT_ARGS["secret_key"], algorithms=[JWT_ARGS["algorithm"]])
        admin_id: str = payload.get("sub")
        # print(payload.get("index"))
        index: int = payload.get("index")
        if not index:
            raise credentials_exception
        # token_data = TokenData(email=email)
    except InvalidTokenError:
        raise credentials_exception
    with Session(engine) as session:
        admin = session.query(Administrator).filter(Administrator.id == admin_id).first()
    if admin is None:
        raise credentials_exception
    return admin

接口依赖注入:

管理员接口验证依赖注入:current_admin: Administrator = Depends(get_admin)
用户接口验证依赖注入:current_user: User = Depends(get_current_active_user

前端处理:

#使用localstorage存储token
localStorage.setItem('token', res.data.data.token)
  • 在访问其他接口时,在前端进行处理,这样后续发送的请求头都带着token。
request.interceptors.request.use(function (config) {
    if (localStorage.getItem('token') && localStorage.getItem('token') != "")
        config.headers["Authorization"] = "Bearer " + localStorage.getItem('token')
    return config
})

运行实例:

使用postman发送请求,检测拦截器是否成功运行。

  • 普通用户登录获取token
    请添加图片描述
  • 不使用token访问管理员功能接口。
    请添加图片描述
  • 使用用户token访问管理员功能接口。
    请添加图片描述
  • 获取管理员接口。
    请添加图片描述
  • 使用管理员的token访问管理员功能接口。
    在这里插入图片描述
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值