FastApi-19-Token校验_第三方库


上节内容,我们已经介绍了 ​​token​​​ 的生成,是直接使用的第三方库 ​​jose​​​,当然 ​​jose​​​ 可以生成 ​​token​​​,想必他也可以校验 ​​token​​ 了。

Part1token 校验

代码

from jose import jwt
# 导入token校验的两种异常,一种是token超时异常,一种是token错误异常
from jose.exceptions import ExpiredSignatureError, JWTError
def judge_token(token):
# 尝试解密,解密成功后,秘钥,payload,有效时长校验通过,则会返回payload
try:
payload = jwt.decode(token,SECRET_KEY)
print(payload)
return True

# 否则,则捕获异常,进行提示
except ExpiredSignatureError as e:
print('token过期了!')
return False
except JWTError as e:
print('token验证失败!')
return False

按照传统的 ​​jwt​​​ 协议,我们需要解密 ​​token​​​ 后,对 ​​token​​​ 的秘钥,​​payload​​​,有效时长进行单独的校验。以上,​​token​​​ 的秘钥,​​payload​​​,有效时长,​​jose​​​ 都帮我们完成了,我们只需要调用 ​​jose.jwt​​​ 的 ​​encode​​​ 和 ​​deode​​ 就可以完成加解密。

执行校验

if __name__ == "__main__":
tk=create_token()
print(tk)
res1=judge_token(tk)
print(res1)
import time
time.sleep(60)
res2=judge_token(tk)
print(res2)

执行结果

> python utm.py
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTI1Mjg0MzYsInN1YiI6InBoeWdlciIsInVpZCI6IjEyMzQ1NiJ9.yVhoAKyZFvQi3q4wqd1JoRondl9A6wUaALueP00oyhc
{'exp': 1612528436, 'sub': 'phyger', 'uid': '123456'}
True
token过期了!
False```
> 因为默认token的有效期为60秒,我们在第二次校验token前睡眠了61秒,所以第二次的校验结果为过期!

**使用错误的token校验**
```python
if __name__ == "__main__":
res=judge_token('phyger666')
print(res)

FastApi-19-Token校验_错误异常_02

以上就是今天的全部内容了,感谢您的阅读,我们下节再会。