Beispiel #1
0
def check_jwt_token(
        token: Optional[str] = Header(..., description="登录 token")
) -> Union[dict, Any]:
    """
    解析验证token  默认验证headers里面为token字段的数据
    可以给 headers 里面token替换别名, 以下示例为 X-Token
    token: Optional[str] = Header(None, alias="X-Token")
    :param token:
    :return:
    """
    try:
        decode_token = jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])

        current_time = datetime.now()       # 系统当前时间
        expiration_time = datetime.fromtimestamp(decode_token.get("exp")) - timedelta(hours=8)  # token 过期时间
        if current_time > expiration_time:  # 验证 token 是否过期
            raise custom_exc.TokenExpired()

        # -------- 验证 token 是否失效(和 redis 中的对比,是否存在)--------- #
        redis_userid = decode_token.get("sub")      # 获取存储在 redis 中的 key(这里的 sub 为 userid)
        redis_token = redis_client.get(redis_userid)
        if not redis_token:
            raise custom_exc.TokenAuthError()
        return decode_token
    except jwt.ExpiredSignatureError:
        raise custom_exc.TokenExpired()
    except (jwt.JWTError, ValidationError, AttributeError):
        raise custom_exc.TokenAuthError()
def get_current_user(db: Session = Depends(get_db),
                     token: Optional[str] = Depends(
                         check_jwt_token)) -> SysUser:
    """
    根据header中token 获取当前用户
    :param db:
    :param token:
    :return:
    """
    user = curd_user.get(db, id=token.get("sub"))
    if not user:
        raise custom_exc.TokenAuthError(err_desc="User not found")
    return user
def check_jwt_token(token: Optional[str] = Header(
    ..., description="登录token")) -> Union[str, Any]:
    """
    解析验证token  默认验证headers里面为token字段的数据
    可以给 headers 里面token替换别名, 以下示例为 X-Token
    token: Optional[str] = Header(None, alias="X-Token")
    :param token:
    :return:
    """

    try:
        payload = jwt.decode(token,
                             settings.SECRET_KEY,
                             algorithms=[settings.ALGORITHM])
        return payload
    except jwt.ExpiredSignatureError:
        raise custom_exc.TokenExpired()
    except (jwt.JWTError, ValidationError, AttributeError):
        raise custom_exc.TokenAuthError()