爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5900|回复: 0

[源代码] Django最佳用户认证方式---token的生成与解析

[复制链接]

新浪微博达人勋

发表于 2021-11-28 15:08:42 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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)









密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表