1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import datetime import jwt
payload = { 'exp': int((datetime.datetime.now() + datetime.timedelta(seconds=60)).timestamp()), 'data': {'uid': 2} } encode_jwt = jwt.encode(payload, 'qwe123', algorithm='HS256') encode_str = str(encode_jwt, 'utf-8')
decode_jwt = jwt.decode(encode_str, 'qwe123', algorithms=['HS256']) print(encode_str) print(encode_jwt) print(decode_jwt)
|
在这之中,paylod中的exp是可选的,data也是可以直接写成:
加上exp是为了设置一个过期时间,过了时间后,解码就解不出来了,会直接报错,没错,就是这么直接!
编码的时候,第一个参数是字典类型,第二个参数是密钥,第三个参数是加密方式。
encode之后会返回一条Byte类型的数据,然后将其转码,弄出一个utf-8编码的字符串。
接下来是解码,参数第一个填转码后的字符串,第二个填密钥,第三个要注意了,参数是列表形式,键名也不是编码时的algorithm,而是algorithms。加了个s,这里要看清楚,以免遭遇不测。解码之后就可以看到内容了。
再说一下Django+Vue时使用jwt的设计思路:
在用户成功登陆后就把jwt放在客户端,设置jwt会过期,在过期后使用户退出登陆,再次登陆获取新的jwt。
(2021/03/19)2.0.1版本的PyJWT与之前不同了,encode返回的直接就是字符串,所以上面的代码应该改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import datetime import jwt
payload = { 'exp': int((datetime.datetime.now() + datetime.timedelta(seconds=60)).timestamp()), 'data': {'uid': 2} } encode_jwt = jwt.encode(payload, 'qwe123', algorithm='HS256')
decode_jwt = jwt.decode(encode_jwt, 'qwe123', algorithms=['HS256']) print(encode_jwt) print(decode_jwt)
|
(这边文章因为写的时候没有设置时间,一修改或者复制就会因为日期重置出现”浮出水面”的现象,所以在2021/03/19将其日期设置为2020/09/13,其实我觉得这篇文章应该是我在2020年6月份写的。。。)
本篇完。