美文网首页
认证的token不存到数据库

认证的token不存到数据库

作者: aq_wzj | 来源:发表于2018-12-13 18:17 被阅读0次

认证这里,https://www.jianshu.com/p/fa358b32dab0

每个用户登录都会往数据库里写一条数据,然后每次访问需要登录的地址时都要去数据库检查一下token, 这对数据库的压力比较大

现提供一种方法不往数据库写token验证

用户登陆成功以后用自己的方式加密一下用户的id

我用的是

"吃葡萄不吐葡萄皮 id 不吃葡萄倒吐葡萄皮"用md5加密,后面再拼上"|id"

将这个字符串作为token返回给前台

然后访问其他的需要登录的页面时url里拼上这个就好了

例如,: id为1的用户登录了, 生成一个7f38e7a645fbd1b3c68fbc75ecd62d24|1字符串

id为2的用户登录了, 生成一个a07687f76d66557e59db18bd89910e3a|2字符串

访问其他页面时带上这个字符串,例如访问书本详情时的url为:

http://127.0.0.1:8000/books/1?token=a07687f76d66557e59db18bd89910e3a|2

token翻译成明文就是吃葡萄不吐葡萄皮2不吃葡萄倒吐葡萄皮|2

在认证里面通过 " | " 切分取到id , 再通过上面的加密方式生成token与url里面的进行对比

代码示例:

获取加密字符串的函数
import hashlib
def get_token(id):
    md5=hashlib.md5()
    md5.update('吃葡萄不吐葡萄皮'.encode('utf-8'))
    md5.update(str(id).encode('utf-8'))
    md5.update('不吃葡萄倒吐葡萄皮'.encode('utf-8'))
    return md5.hexdigest()

登录成功以后生成token:
token = methord.get_token(user.id)+'|'+str(user.id)

认证类
class LoginAuth:
    def authenticate(self, request):
        token = request.GET.get('token')#获取url的token
        id = token.split('|')[1]#拿到id
        re_token = methord.get_token(id) + '|' + str(id)#根据我的加密方式进行加密
        if token == re_token:#判断url的token是否正确
            user=models.UserInfo.objects.filter(pk=int(id)).first()
            return user,user
        else:
            raise APIException('还没登录')

相关文章

网友评论

      本文标题:认证的token不存到数据库

      本文链接:https://www.haomeiwen.com/subject/mvibhqtx.html