一.关于登录验证

用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data):

来判断是否发送了那三个验证数据

通过

random_str=str(uuid.uuid4())
Token.objects.update_or_create(user=user_obj, defaults={"key":random_str, "created": datetime.datetime.now()}, ) 在token表中创建关联用户,在前端通过cookie来验证,当登录成功后,会带着token回到服务器
 import uuid
import datetime from rest_framework.views import APIView
from rest_framework.response import Response from app01.models import * from django.contrib import auth
from app01.jiyan.captcha_verify import verify class LoginView(APIView): def post(self,request):
print(request.data) # 获取数据
user = request.data.get("username")
pwd = request.data.get("password")
user_obj = auth.authenticate(username=user, password=pwd) res = {"error_no":, "user": None, "msg": None}
if verify(request.data):
if user_obj:
random_str=str(uuid.uuid4())
Token.objects.update_or_create(user=user_obj, defaults={"key":random_str, "created": datetime.datetime.now()}, )
# 基于auth表的对象
res["username"] = user_obj.username
res["access_token"] = random_str else:
res["msg"] = "用户名或者密码错误!"
else:
res["msg"] = "验证码错误!"
print("res", res)
return Response(res)

验证

关于在后端接收验证token

在用户在前端发送数据,后端会进行

token = request.META.get("HTTP_AUTHORIZATION")
接收数据,并在token数据库中查找,
存在,会记录登录时间以及有效期,并存储redis缓存中,
在下次登录直接校验缓存即可直接登录
 from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01.models import Token
import datetime
from django.core.cache import cache
import pytz class LoginAuth(BaseAuthentication):
def authenticate(self, request):
if request.method == "OPTIONS":
return None token = request.META.get("HTTP_AUTHORIZATION")
print("token", token)
# 1.缓存检查
# 这里的user 是放在redis 里面的user对象
user = cache.get(token)
if user:
return user, token
# 2.数据库校验
token_obj = Token.objects.filter(key=token).first()
if not token_obj:
raise AuthenticationFailed("认证失败!")
print(token_obj.created)
now = datetime.datetime.now() now = now.replace(tzinfo=pytz.timezone('UTC'))
print(now)
delta = now - token_obj.created
print(delta)
state = delta < datetime.timedelta(weeks=2)
if state:
delta = datetime.timedelta(weeks=2)-delta
print(delta)
# 返回关联的token值,以及用户对象
cache.set(token_obj.key, token_obj.user, min(delta.total_seconds(), 3600*24*7))
return token_obj.user, token_obj.key
else:
raise AuthenticationFailed("认证超时!")

auth

												

lf 前后端分离 (1) auth,token认证的更多相关文章

  1. Cookie、Session、Token那点事儿和前后端分离之JWT用户认证

    (两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...

  2. [django]前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  3. 前后端分离之JWT用户认证(转)

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  4. 前后端分离之JWT用户认证zf

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  5. shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃

    这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...

  6. [转] 前后端分离之JWT用户认证

    [From] http://www.jianshu.com/p/180a870a308a 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当 ...

  7. 前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  8. lf 前后端分离 (2) 课程数据获取,Serializer的返回

    一.关于课程数据的返回 在进行前后端分离时,会通过def 进行前后端传值, 本质上遵循rest 网址规范  增删改查查 get,post,put,del get(\d+) 1.在从数据库获取数据后,进 ...

  9. 前后端分离,获取token,验证登陆是否失效

    maven依赖 <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</a ...

随机推荐

  1. python的wraps函数

    当使用@修饰符修饰函数时,会存在这样一个问题:被修饰的函数会消失(这是因为修饰函数没有设置返回值,如果设置了返回值,则就把返回值赋给被修饰函数,比如,test1函数的返回值设置为 return 6, ...

  2. 攻防世界Web-bug

    一直误以为是二次注入,看了别人wp,自己梳理了一遍 首先打开题目页面 先注册一个账号 注册成功(注意这个UID) 然后注意下包,发现cookie中的user很可疑,是一串md5值,我们可以推测是我们注 ...

  3. ini_set()

    ini_set ( string $varname , string $newvalue ) : string 设置指定配置选项的值.这个选项会在脚本运行时保持新的值,并在脚本结束时恢复. 参数 va ...

  4. hadoop自带RPC的使用 代码demo

    引入的三方包 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop- ...

  5. Visual Studio 2015 Tools for Unity使用基础

    Unity4.x编辑器侧 具体版本号:Visual Studio 2015 Tools for Unity 3.7.0.1 该插件在:Microsoft Visual Studio Tools for ...

  6. webrtc笔记(3): 多人视频通讯常用架构Mesh/MCU/SFU

    问题:为什么要搞这么多架构? webrtc虽然是一项主要使用p2p的实时通讯技术,本应该是无中心化节点的,但是在一些大型多人通讯场景,如果都使用端对端直连,端上会遇到很带宽和性能的问题,所以就有了下图 ...

  7. Vue 学习记录(一)-创建项目

    环境准备 node.js vue-cli 安装配置环境 1.下载node.js,使用默认配置安装 . 2.使用npm命令安装国内下载镜像(可选) cmd: npm install  -g  cnpm  ...

  8. UOS系统 - 国产统一操作系统UOS的基本知识

    一.UOS操作系统含义及现状 UOS操作系统与windows不同的是,UOS统一操作系统支持龙芯.申威.华为鲲鹏等一票国产处理器芯片.它的诞生是多家国内科技公司联合孕育的结果,包括中国电子集团.武汉深 ...

  9. 用 Raspberry Pi 架设加密 DNS 客户端

    Cloudflare 宣布使用 1.1.1.1 作为 DNS,并且强调隐私保护.由于 Cloudflare DNS 支持 DNS-over-TLS 和 DNS-over-HTTPS,这使得加密 DNS ...

  10. ubuntu16.04跑通Mask R-CNN Demo

    1. 下载源码: git clone https://github.com/matterport/Mask_RCNN 2. 安装依赖项(其实就是程序的运行环境) 我是用conda新建的虚拟环境. (1 ...