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 ...
随机推荐
- JS高阶---线程与事件机制(小结)
[大纲] [主体] 注意:先进先出 事件轮询: 事件初始化代码执行完毕后,开始执行事件队列里的待处理事件 .
- python使用open的OSError: [Errno 22] Invalid argument错误
这两天在写一个新闻类的spider时,遇到了OSError: [Errno 22] Invalid argument这个错误,苦恼的两天,无果.后来通过请教学长,发现原来是打开的文件名中含有一些系统的 ...
- day59_9_25中间键与登录认证
一.django中间件简介. 在django中,有这样的生命周期: 中间件就是处于wsgiref和urls模块中间,可以拦截所有的请求,其中有7个默认中间件: MIDDLEWARE = [ 'djan ...
- Jmeter怎么搭建环境
1.JDK检查与安装 cmd输入命令:java -version -- 检查主机是否安装了JDK JDK下载官网:https://www.oracle.com/technetwork/java/j ...
- 《滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路》
SSD:采用闪存: 读的速度很快:写入数据时,因为需要通过加压的方式对存储单元进行电子填充,所以速度略慢:擦除速度最慢,擦除块的时间在ms级.在使用SSD的时,需要考虑到SSD的读写不平衡的特性. 滴 ...
- 【转】Linux设置定时任务方法
设置:每天4点运行脚本/var/x/web/train/modeltrain [root@T-XXX-ML-01 log]# crontab -e0 4 * * * /var/x/web/train/ ...
- Identity Server4资料
https://www.cnblogs.com/cgzl/p/9405796.html https://www.cnblogs.com/cgzl/p/7780559.html https://clou ...
- 探索 ASP.Net Core 3.0系列五:引入IHostLifetime并弄清Generic Host启动交互
前言:在本文中,我将介绍如何在通用主机之上重新构建ASP.NET Core 3.0,以及由此带来的一些好处. 同时也展示了3.0中引入新的抽象类IHostLifetime,并描述了它在管理应用程序(尤 ...
- 【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法
解决方法: 使用easyexcel解决超大数据量的导入导出xlsx文件 easyexcel最大支持行数 1048576. 官网地址: https://alibaba-easyexcel.github. ...
- mongodb 更新数据时int32变为double的解决办法 & 教程
https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html mongodb 更新数据时int32变为double的解决办法 ...