- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
现在教Django的很多书,大量篇幅还是讲“前后端不分离”的知识点,
例如:模板template,表单,后台,模板语法(DTL,Jinja2),视图类......
这是很过时的!因为现在都是前后端分离开发的嘛。
由于受到误导,Django的认证方式一直让我感到没有头绪,无从下手。
再加上平时我更多的时间用于具体业务功能的开发,用户认证的事就耽误了。
最近3天,我沐浴更衣,静下心来,仔细看了几个视频和帖子,
最后发现,原来session和基于后端数据库密钥对照的方式已经过时了。
而且,我之前不明白,为什么HttpResponse可以设置cookie,但JsonResponse不行?
后来才知道,网页才能设置cookie,而AJAX方式的JsonResponse只是传递json数据,是不能设置cookie的。
目前最流行的认证方式是token,而且有个JWT集成了常用的token操作。
认证流程如下:
1、用户用账号密码登录,向服务器发送post请求
2、服务器检查账号密码正确后,会将【代表账号名的信息】+【过期时间】+...+【随机字符串/盐】,混合变形生成一个token字符串,返回给浏览器
3、浏览器收到token后,保存下来,以后每次请求都会携带该token
4、以后每次服务器收到token,都会先反解token,如果解不出来,就说明用户未登录,如果反解发现过期了,也就代表用户未登录。
显然,这里最绝密的就是【随机字符串/盐】了,绝对不能泄露!
token中也绝对不要写密码,因为那部分是可以反解的。
JWT的生成和解析的Python代码如下:
'''
本例演示如何生成和解析token
安装JWT:pip install pyjwt
'''
import jwt
from datetime import datetime,timedelta
# 生成token的函数:
def makeToken():
# 设置token过期时间:
outime=datetime.now()+timedelta(minutes=2)
# 过期时间转字符串(json不支持datetime格式呀):
outime=outime.strftime("%Y-%m-%d %H:%M:%S")
# 有效负载:
payload={"account":"lilian","outime":outime}
# 加盐:
salt="12s)a345678!d9@876*5s&32-1"
# 生成token:
token=jwt.encode(payload,salt)
return token
def decodeToken(token):
print('\ntoken=\n',token)
payload = None
try:
payload = jwt.decode(token,"12s)a345678!d9@876*5s&32-1",algorithms=['HS256'])
print('\n有效负载=\n',payload)
# 过期时间:
t=payload['outime']
# 字符串转datetime:
t=datetime.strptime(t,"%Y-%m-%d %H:%M:%S")
print('\n过期时间=\n',t)
except:
print('\ntoken错误')
if __name__=="__main__":
token=makeToken()
decodeToken(token)
|
|