| 
 
	积分3625贡献 精华在线时间 小时注册时间2014-10-21最后登录1970-1-1 
 | 
 
| 
现在教Django的很多书,大量篇幅还是讲“前后端不分离”的知识点,
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  例如:模板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)
 
 
 
 
 
 
 
 
 
 
 | 
 |