一.关于登录验证

用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端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. day70_10_16drf组件响应模块,异常模块和序列化模块。

    一.解析模块 为什么要配置解析模块? 1)drf给我们通过了多种解析数据包方式的解析类. 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析. 3)全局配置就是针对每一个视图 ...

  2. Python进阶-XVIII 封装、(属性、静态方法、类方法)语法糖、反射

    1.封装 类中的私有化:属性的私有化和方法的私有化 会用到私有的这个概念de场景 1.隐藏起一个属性 不想让类的外部调用 2.我想保护这个属性,不想让属性随意被改变 3.我想保护这个属性,不被子类继承 ...

  3. 解释JUnit中@BeforeClass和@AfterClass标注的方法必须是static的,而在TestNg不必

    在JUnit中@BeforeClass和@AfterClass标注的方法必须是static的:但是在TestNg中却没有这样的限制,这是为什么呢. 其实和他们两的运行机制有关. 在junit中: 每运 ...

  4. a 标签 pointer-events

    a 标签渲染到也页面之后,由于某些原因需要,禁用. 有两种方法可以设置禁用效果. 1.使用 CSS 属性 pointer-events ,设置此属性为 none 之后,元素将不会成为鼠标事件的 tar ...

  5. FFT/NTT基础题总结

    在学各种数各种反演之前把以前做的$FFT$/$NTT$的题整理一遍 还请数论$dalao$口下留情 T1快速傅立叶之二 题目中要求求出 $c_k=\sum\limits_{i=k}^{n-1}a_i* ...

  6. torch_12_BigGAN全文解读

    1.摘要: 尽管近来生成图片模型取得了进步,成功生成了高分辨率的图片,但是在复杂的数据集中,样本的多样性仍然是难以捉摸的目标.本文尝试在大规模上训练生成对抗网络,并研究这种规模下的不稳定性.我们发现将 ...

  7. POJ 1094 (传递闭包 + 拓扑排序)

    题目链接: POJ 1094 题目大意:有 1 ~ N 个大写字母,且从 A 开始依次 N 个.再给你 M 个小于的关系,比如 A < B ,让你判断三种可能: 1.在第 i 个关系罗列之后,是 ...

  8. python xpath图片爬取

    import requests from urllib.request import urlretrieve from lxml import etree headers = { 'User-Agen ...

  9. sierpinski垫片(3D)[误]

    今天是因为可以用py而高兴的一天. 昨天老板淡淡地回了一句,sierpinski地毯画得挺好的. 我思考了五秒钟之后,想起来作业其实是sierpinski垫片.     三角垫片比地毯难做多了. 因为 ...

  10. DGCNN

    架构总览 模型的整体架构源于 WebQA 的参考论文 Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Fact ...