lf 前后端分离 (1) auth,token认证
一.关于登录验证
用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端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认证的更多相关文章
- Cookie、Session、Token那点事儿和前后端分离之JWT用户认证
(两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...
- [django]前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- 前后端分离之JWT用户认证(转)
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- 前后端分离之JWT用户认证zf
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃
这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...
- [转] 前后端分离之JWT用户认证
[From] http://www.jianshu.com/p/180a870a308a 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当 ...
- 前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- lf 前后端分离 (2) 课程数据获取,Serializer的返回
一.关于课程数据的返回 在进行前后端分离时,会通过def 进行前后端传值, 本质上遵循rest 网址规范 增删改查查 get,post,put,del get(\d+) 1.在从数据库获取数据后,进 ...
- 前后端分离,获取token,验证登陆是否失效
maven依赖 <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</a ...
随机推荐
- c# 第33节 类的封装--访问修饰符
本节内容: 1:封装的简介 2:封装怎么实现 3:访问修饰符 1:封装的简介 2:封装怎么实现 3:访问修饰符 4:访问修饰符注意点
- python3.5.3rc1学习三:文件操作
##全局变量与局部变量x = 6 def printFuc(): y = 8 z =9 print(y + z) print(x) printFuc()#print(y)#常见错误##name = & ...
- leetcode 树类问题
208. Implement Trie (Prefix Tree) 子节点个数对应的是数组
- 访问https问题
访问https问题 package com.yuantiao.smartcardms.tools; import com.alibaba.fastjson.JSONObject; import com ...
- Shiro内置过滤器
Shiro内置过滤器 DefaultFilter 枚举类定义了shiro所有的默认过滤器. package org.apache.shiro.web.filter.mgt; public enum D ...
- (day49)Django框架简介
目录 一.Web框架 (一)本质 (1)动静态网页 (2)wsgiref模块 (3)jinja2模块 (4)手动实现思路 (二)python主流框架 (1)Django (2)flask (3)tor ...
- 浅谈C++ STL deque 容器
浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...
- JDOJ1178:铺地板II
JDOJ1178:铺地板II https://neooj.com/oldoj/problem.php?id=1178 题目描述 用1 x 1和2 x 2的磁砖不重叠地铺满N x 3的地板,共有多少种方 ...
- 突然看到原来除了jar包还有war包啊?????
先来说说区别: 首先,jar包呢,是一个压缩文件,可以由很多文件压缩而成,,简单来说就是,jar包是别人写好的一些类,然后对这些类 进行打包,这就是jar包,你可以直接用这些 jar包,使用里面的类 ...
- SQL Server 迁移数据库 (四)备份和还原
1. 备份 2. 复制 3. 粘贴 4. 还原 截图软件出问题了,估计重启下就好,但是备份还原比较简单,懂的都懂,马上下班了就不贴图了.