【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)

1:登录视图

redis_cli.py文件:          import redis          Pool= redis.ConnectionPool(host=‘localhost‘,port=6379,decode_responses=True)

登录视图文件:import redisfrom utils.redis_cli import Pool    # 创建redis连接池 

class UserLogin(APIView):
    """
        用户登陆认证: 登录成功更新token值,并且返回给前端,登录失败抛出异常提示
    """
    authentication_classes = []   # 登录接口不需要token认证

    def post(self, request, *args, **kwargs):
        username = str(request.data.get("username"))  # 前端需要提交json格式
        password = str(request.data.get("password"))

        try:
            csrf = {}
            user_obj = models.UserInfo.objects.filter(username=username,password=password).first()

            if not user_obj:
                csrf[‘code‘] = 401
                csrf[‘message‘] = "账号或者密码错误"
                return JsonResponse(csrf)

            t = datamd5.md5(username)  # md5给token加密
            token = t + ":" + username     # token:username  加上用户名标识,
            sr = redis.Redis(connection_pool=Pool)
            sr.hset(username,"token",token)       # 存入格式
            sr.expire(username,10800)      # 3个小时过期
            csrf[‘token‘] = token
            return JsonResponse(csrf)

2:认证系统文件配置(token认证)

from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication #继承认证类

class Authtication(BaseAuthentication):
    def authenticate(self, request):
        try:
            request_token = request.META.get(‘HTTP_AUTHENTICATE‘,"")
            print("request_token",request_token)
            token,username = request_token.split(":")      # 登录视图设置的token有 :符号
            sr = redis.Redis(connection_pool=Pool)
        except Exception as e:
            raise exceptions.AuthenticationFailed({"code": 405, "error": "请求错误,请重新登录"})

            # 判断登录是否有token
            if not token:
                raise exceptions.AuthenticationFailed({"code": 407,"error":"用户请求异常,未携带token"})

            # 判断 token 正确或者是否过期
            redis_token = sr.hget(username,"token")
            if request_token != redis_token:
                raise exceptions.AuthenticationFailed({"code": 405, "error": "请求错误,请重新登录"})

    def authenticate_header(self, request):
        pass

原文地址:https://www.cnblogs.com/wanghong1994/p/11993950.html

时间: 2024-10-28 19:10:09

【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)的相关文章

Django用户认证系统(二)Web请求中的认证

在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authenticated()来区分,例如: if request.user.is_authenticated(): # Do something for authenticated users. else: # Do something for anonymous users. 登陆login login(

【django后端分离】Django Rest Framework之一般配置(简单剖析)

1:常设状态码 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent). 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功. 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功. 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作

前后端分离Django解决跨域的问题

现在,前端与后端分处不同的域名,我们需要为后端添加跨域访问的支持 否则前端无法使用axios无法请求后端提供的api数据,我们使用CORS来解决后端对跨域访问的支持. 使用django-cors-headers扩展 在 Response(headers={"Access-Control-Allow-Origin":'客户端地址/*'}) 文档:https://github.com/ottoyiu/django-cors-headers/ 安装 pip install django-co

Django Authentication 用户认证系统

一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否是合法用户,权限管理则是决定一个合法用户具有哪些权限.这里,"身份验证"这个词同时代指上面两部分的含义. 系统主要包括: 用户 许可 组 可配置的密码哈希系统 用于用户登录或者限制访问的表单和视图工具 可插拔的后端 类似下面的问题,请使用第三方包: 密码强度检

django认证系统 Authentication

Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理则是决定一个合法用户具有哪些权限.往后,‘认证’这个词同时代指上面两部分的含义. Django的认证系统主要包括下面几个部分: 用户 许可 组 可配置的密码哈希系统 用于用户登录或者限制访问的表单和视图工具 可插拔的后台系统 类似下面的问题,不是Django认证系统的业务范围,请使用第三方工具: 密

从MVC到前后端分离

摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Struts.Spring MVC等框架. 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本

从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之七使用JWT生成Token(个人见解)

在 上一篇中讲到了在NetCore项目中如何进行全局的请求模型验证,只要在请求模型中加了验证特性,接口使用时只用将数据拿来使用,而不用去关系数据是否符合业务需求. 这篇中将讲些个人对于JWT的看法和使用,在网上也能找到很多相关资料和如何使用,基本都是直接嵌到  Startup 类中来单独使用.而博主是将jwt当做一个验证方法来使用.使用起来更加方便,并且在做验证时也更加的灵活. 1.什么是JWT? Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON

[转]从MVC到前后端分离

从MVC到前后端分离 来源:csdn 发布时间:2015-10-26 阅读次数:1680 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的Java Bean,包含一系列的成员变量及其getter/setter方法.对于视图而言,它更加偏重于展现,也就是说,视图决定了界面

从 MVC 到前后端分离——转自:OSChina 黄勇

转自:OSChina 黄勇 从 MVC 到前后端分离 1 理解 MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,例如,在 Java 中一般通过一个简单的 POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的 Java Bean,包含一系列的成员变量及其 getter/setter 方法.对于 视图 而言,它更加偏重于展现,也就是说,视图决定了界面到底长什么样