玩儿了一下django User authentication
五一在家,VPN不能链接了,而项目在本地run的过程中,又需要链接公司的SSO server才能login。下雨,不想去公司,又不得不在家做task,只能想办法避开SSO login,以前知道django自带的有login模块,就打算用它暂时替换掉项目本身的login模块,这样就能绕过SSO验证,就不用连接到公司的server了。
我接这个项目的时候,login模块就做好了,一直也没出问题,也没去研究过,趁此机会,学习了一下django的用户验证框架。
以前没怎么做过web,开始正儿八经接触web框架就是springMVC,用户验证这块儿也就配过spring-security,初步认识Auth/Auth模块就是user验证,赋予权限,然后再驱动登录创建session。django的User authentication模块也确实涵盖了这些,不过,它的特点是更简单,更灵活。
django的用户验证模块基于django.contrib.auth,auth.models里面有一个User类,User类继承了AbstractBaseUser和PermissionsMixin两个类,AbstractBaseUser提供User的基本属性和相应的get/set方法比如username,password,email。PermissionsMixin提供usr权限相关的方法,可以验证User的权限,赋予User权限等。
auth的__init__.py里面提供了authenticate, login, logout等方法,用于验证和登录、登出。
django提供了几种用户验证方式:user对象验证,web requests对user对象验证,还有基于装饰器的验证方法@login_required,@user_passes_test,@permission_required。用起来比较简单。
当然,除了default的authentication,django也允许使用自定义的authentication backend, 我一直认为是django框架灵活性的最大体现,作为一个全栈的web框架,django更倾向于自己实现所有的模块,很少直接兼容第三方模块,能自定义backend替换default的,算是django框架的一条通往外界之路。
自定义的authentication backend只要实现两个方法:authenticate和get_user,然后在setting.py的AUTHENTICATION_BACKENDS属性里进行一下声明就可以了,auth模块的__init__.py中有个get_backends的方法,会收集所有声明在AUTHENTICATION_BACKENDS中的所有authentication backend对象,在auth.authenticate方法中遍历执行get_backends对象列表的authenticate方法,只要返回的user为真,就直接return出去。
所以,我在项目中避开SSO login的操作就是把AUTHENTICATION_BACKENDS中django的default user authentication模块(django.contrib.auth.backends.ModelBackend),调整到自定义的authentication backend声明之前,然后在成功验证拿到User对象之后,调用django的login,完成session创建和登录跳转,就OK了。
玩儿了一下django User authentication的更多相关文章
- Using django model/authentication/authorization within Tornado
There is a project which is deployed within django. So its authentication system is built from Djang ...
- django(权限、认证)系统—— 基于Authentication backends定制
在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发. Django实现的这套permission体系,在底层被抽象 ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- django(权限、认证)系统——用户Login,Logout
上面两篇文章,讲述的Django的Authentication系统的核心模型对象User API和相关的使用,本文继续深入,讨论如何在Web中使用Authentication系统. 前面说了,Djan ...
- django中的中间件机制和执行顺序
这片文章将讨论下面内容: 1.什么是middleware 2.什么时候使用middleware 3.我们写middleware必须要记住的东西 4.写一些middlewares来理解中间件的工作过程和 ...
- django内置 Contenttypes 框架
一.什么是Django ContentTypes? 1.Django 包含一个ContentTypes 应用,它可以追踪安装在你的Django 项目里的所有应用,并提供一个高层次的.通用的接口用于与你 ...
- Django remedy a security issue refer dos attack
Today the Django team is issuing multiple releases -- Django 1.4.8, Django 1.5.4, and Django 1.6 bet ...
- Django CBV加装饰器、Django中间件、auth模块
一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...
- 第六章:Django 综合篇 - 4:django-admin和manage.py
目录 一.Django内置命令选项 check dbshell diffsettings flush makemigrations migrate runserver shell startapp s ...
随机推荐
- ural 1242. Werewolf
1242. Werewolf Time limit: 1.0 secondMemory limit: 64 MB Knife. Moonlit night. Rotten stump with a ...
- lua ipairs
tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = ...
- BZOJ4298 : [ONTAK2015]Bajtocja
设f[i][j]为第i张图中j点所在连通块的编号,加边时可以通过启发式合并在$O(dn\log n)$的时间内维护出来. 对于每个点,设h[i]为f[j][i]的hash值,若两个点hash值相等,则 ...
- BZOJ3787 : Gty的文艺妹子序列
将序列分成$\sqrt{n}$块,预处理出每两块之间的逆序对数,以及ap[i]表示前i块内数字出现次数的树状数组 预处理:$O(n\sqrt{n}\log n)$ 修改时,ap[i]可以在$O(\sq ...
- POJ 3580 (伸展树)
题目链接: http://poj.org/problem?id=3580 题目大意:对一个序列进行以下六种操作.输出MIN操作的结果. 解题思路: 六个操作,完美诠释了伸展树有多么吊.注意,默认使用L ...
- 【SPOJ】694. Distinct Substrings
http://www.spoj.com/problems/DISUBSTR/ 题意:求字符串不同子串的数目. #include <bits/stdc++.h> using namespac ...
- 【POJ】3261 Milk Patterns
http://poj.org/problem?id=3261 题意:一个长度为n的串,要求最长的子串的长度且这个子串的出现次数不少于k次.(1<=n<=20000, 2<=k< ...
- 【BZOJ】2435: [Noi2011]道路修建(树形dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2435 我怎么感觉那么水.. 坑的是,dfs会爆...好吧..用bfs.. //upd:我的智商也是醉 ...
- 泛型,动态创建List<T> (转摘)
第一种: static void Main() { object intList = MakeList(typeof(int), 1, 2, 3); ...
- Java 读写图像
Java中进行图像I/O(即读图片和写图片,不涉及到复杂图像处理)有三个方法:1. Java Image I/O API,支持常见图片,从Java 2 version 1.4.0开始就内置了.主页:h ...