五一在家,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. BZOJ3853 : GCD Array

    1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ \[\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=&v[\gcd(\fr ...

  2. (centos)linux下访问双系统windows7文件系统

    fdisk -l 无法挂载 NTFS格式的分区:mount: unknown filesystem type ‘ntfs’.   问题:       # mount –t ntfs /dev/sdb1 ...

  3. 使用CSS 3创建不规则图形 文字围绕

    前言 CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中.本篇文章的目的是为大家开启它的冰山一角.我希望这篇文章能让你对不规则图形有一个初步的了解. 现在,我们已经可以使用CSS 3 常 ...

  4. Robotium Table控件的处理

    HTML代码: <html> <head> <title>Table</title> </head> <body> <ta ...

  5. Java读取txt文件

    package com.loongtao.general.crawler.slave.utils; import java.io.BufferedReader; import java.io.File ...

  6. Log4j日志级别

    日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level). 日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4 ...

  7. 发生了COMException 异常来自 HRESULT:0x80040228

    异常信息: 发生了COMException 异常来自 HRESULT:0x80040228 原因解决方法:窗体中忘记放LicenseControl控件.,加上LicenseControl即可

  8. 相关css 细节处理 neat.css

    人性化的细节处理 例如: textarea 默认只能垂直拖动,防止宽度改变破坏布局. textarea { resize: vertical; } 汉字字号小于 12px 不易阅读,为 <sma ...

  9. [ZZ] HDR the bungie way

    http://blog.csdn.net/toughbro/article/details/6755394 bufferencoding游戏float算法 bungie 06年,gamefest上的p ...

  10. 【ZZ】 移位贴图 Displacement Mapping

    http://blog.csdn.net/huazai434/article/details/5650629 说明:该技术需要VS3.0的支持!!! 一,移位贴图类似于地形渲染.不过由于移位纹理可以做 ...