rstful登陆认证并检查session是否过期
一:restful用户视图
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
# Author:Leslie-x
from users import models
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import viewsets
from rest_framework import serializers
from django.contrib.auth import authenticate, login, logout class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.User
exclude = ('password',)
class UserViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
authentication_classes = (UserAuthentication,) @action(detail=False, methods=['post'])
def register(self, request, *args, **kwargs):
username = request.data.get("username")
queryset = User.objects.filter(username=username)
if queryset.exists():
raise exceptions.PermissionDenied('该账号已经被注册')
user = User.objects.create_user(**request.data)
UserProfile.objects.create(user=user, nickname=user.username)
data = self.get_serializer(user).data
return Response(data) @action(detail=False, methods=['post'])
def login(self, request, *args, **kwargs):
username = request.data.get("username")
password = request.data.get("password")
user = authenticate(username=username, password=password)
if not user:
raise exceptions.PermissionDenied('用户名或密码错误')
auth_id = request.session.get('_auth_user_id')
if auth_id != str(user.pk):
logout(request)
login(request, user)
data = self.get_serializer(user).data
data['session_key'] = request.session.session_key
return Response(data) @action(detail=False, methods=['post'])
def logout(self, request, *args, **kwargs):
logout(request)
return Response()
二:检查session是否过期
from rest_framework.authentication import SessionAuthentication
from rest_framework.request import Request
from django.contrib.sessions.models import Session
from rest_framework import exceptions
import arrow class CustomAuth(SessionAuthentication): def check_session(self, request):
session_key = request.session.session_key
queryset = Session.objects.filter(session_key=session_key)
if not queryset.exists():
raise exceptions.PermissionDenied('非法用户,拒绝访问')
expire_date = queryset.first().expire_date
now = arrow.now().format('YYYY-MM-DD HH:mm:ss')
if not arrow.get(now) < arrow.get(expire_date):
raise exceptions.PermissionDenied('session expired') def authenticate(self, request: Request):
ret = super().authenticate(request)
self.check_session(request)
return ret
rstful登陆认证并检查session是否过期的更多相关文章
- ThinkPHP中:检查Session是否过期
1.创建Session public function index(){ $sess_time=time(); session('name','andy'); session('time_stamp' ...
- MVC登陆认证简单设置
首先,弄个基类 /// <summary> /// 所有控制器基类,里面重写了OnActionExecuted方法 /// </summary> public class Ba ...
- .net 内置对象之Session对象和Session的过期时间
QQ:827969653 有需要的朋友可以下载Session类:SessionHelper类 http://technet.microsoft.com/zh-cn/library/system.web ...
- 关于.Net WebAPI数据认证(包括登陆认证、模型认证)
1.登陆认证使用WebAPI自动认证 webApi自动认证继承类:AuthorizeAttribute 自动认证类使用在控制器上 [Authentication] public class Card ...
- spring-security 登陆认证之初次探究
首先,希望还对 spring-security框架完全不懂的新手 下载下Git源码. 引入到项目中.这个短文就是边看源码边聊的.也会启动下项目验证自己的推想. 一.登陆认证的登陆配置项 <for ...
- session设置过期的方法(转载)
这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设 ...
- 【学习笔记】【Javaweb】二、Session对象过期时间三种设置方法、Session失效监听器
一.前言 本文:https://www.cnblogs.com/Twobox/p/10361712.html 参考:https://www.cnblogs.com/diewufeixian/p/422 ...
- Spring集成shiro做登陆认证
一.背景 其实很早的时候,就在项目中有使用到shiro做登陆认证,直到今天才又想起来这茬,自己抽空搭了一个spring+springmvc+mybatis和shiro进行集成的种子项目,当然里面还有很 ...
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...
随机推荐
- Alpha版本总结
Alpha版本总结 General Questions a) What went well? Why? 成功之处:界面设计简洁,功能吸引用户. 原因:铁道大学学生上自习不方便,没有固定的教室 ...
- XML中<beans>属性
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
- Fibbing以让虚结点的设置更简单为目的优化网络需求
- Leetcode题库——38.报数
@author: ZZQ @software: PyCharm @file: countAndSay.py @time: 2018/11/9 14:07 说明:报数序列是一个整数序列,按照其中的整数的 ...
- 小学四则运算APP 第一个冲刺 第二天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次程序是为了解决上次判断的问题,但是还是出现新的问题页面无法调整,需要进行改进 本次改进代码 ...
- 项目UML设计(团队)
团队 队名 boy next door 队员 林晗 124(组长) 微博链接 显东 114 微博链接 基智 505 微博链接 松雄 126 微博链接 团队分工 分工表 任务 林晗 显东 基智 松雄 前 ...
- ipmitool+python应用处理大量带外地址
ipmitool 是一种可用在 linux 系统下的命令行方式的 ipmi 平台管理工具,它支持 ipmi 1.5 规范(最新的规范为 ipmi 2.0),通过它可以实现获取传感器的信息.显示系统日志 ...
- 深入理解Java反射+动态代理
答: 反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...
- Delphi中快速修改变量名称
鼠标左键选择需要修改的范围,左侧会出现一个同步编辑模式(Sync Edit Mode),快捷键:CTRL+SHIFT+J,它可以让我们清楚地编写或改写多个同一参数.
- MySQL查询where条件的顺序对查询效率的影响
看到有资料说,where条件的顺序会影响查询的效率,根据的逻辑是: where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然很大), ...