五一在家,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的更多相关文章

  1. Using django model/authentication/authorization within Tornado

    There is a project which is deployed within django. So its authentication system is built from Djang ...

  2. django(权限、认证)系统—— 基于Authentication backends定制

    在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发. Django实现的这套permission体系,在底层被抽象 ...

  3. 用Django Rest Framework和AngularJS开始你的项目

    Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...

  4. django(权限、认证)系统——用户Login,Logout

    上面两篇文章,讲述的Django的Authentication系统的核心模型对象User API和相关的使用,本文继续深入,讨论如何在Web中使用Authentication系统. 前面说了,Djan ...

  5. django中的中间件机制和执行顺序

    这片文章将讨论下面内容: 1.什么是middleware 2.什么时候使用middleware 3.我们写middleware必须要记住的东西 4.写一些middlewares来理解中间件的工作过程和 ...

  6. django内置 Contenttypes 框架

    一.什么是Django ContentTypes? 1.Django 包含一个ContentTypes 应用,它可以追踪安装在你的Django 项目里的所有应用,并提供一个高层次的.通用的接口用于与你 ...

  7. 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 ...

  8. Django CBV加装饰器、Django中间件、auth模块

    一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...

  9. 第六章:Django 综合篇 - 4:django-admin和manage.py

    目录 一.Django内置命令选项 check dbshell diffsettings flush makemigrations migrate runserver shell startapp s ...

随机推荐

  1. lal

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  2. 洛谷 P1025 数的划分 Label:dp

    题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...

  3. html页面元素加载顺序

    一般来说,添加背景图片有三种办法: 直接写在标签的style里面,如: <div style="background-image:url('images/Css.JPG')" ...

  4. HttpClient_用Apache HttpClient实现URL重定向

    很多网站都使用了URL重定向技术,把一个原始请求从一个位置路由到另一个位置.原因可能是多方面的,比如域名转发.URL缩写.隐私保护.在同一网站维持相似的域名等.本文讲述怎样使用Apache HTTPC ...

  5. 【C语言】09-字符串

    一.字符串简介 * 在Java中,一个字符串可以用String类型来存储 String s = "MJ"; C语言中没有String这种类型.其实字符串就是字符序列,由多个字符组成 ...

  6. [Bug FIX]安装 account_check_writing模块后采购收据打印报错的问题

    大写金额没填报错 修改:report_check.xml文件,把<span t-esc="fill_stars(o.amount_in_word)"/>一行替换为 &l ...

  7. 几个与时间相关的php的函数

    这些函数很常用,但是不用的话,像我这样的初学者放下就记不清了,这时最好的办法就是去查文档,写一下印象会更深一些 1.时间戳函数strtotime():一个就是string to time(我自己这样理 ...

  8. Html - 对话箭头

    对话箭头 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="U ...

  9. linux下挂在u盘,移动硬盘的方法,转移服务器资料的时候,使用移动硬盘什么最方便了

    本文章是在centos环境下操作的 最近linux服务器我不小心吧root下面的用户配置,不能远程登录,而且我对linux系统配置也不熟悉,最后的办法就是去了一趟机房,还好是在深圳南山科技园,不算太远 ...

  10. 2016.05.03,英语,《Vocabulary Builder》Unit 21

    sub, means 'under', as in subway, submarine, substandard. A subject is a person who is under the aut ...