Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

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也是可以直接写成:

1
'uid': 2

加上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月份写的。。。)
本篇完。

评论



愿火焰指引你