Django项目中添加ldap登陆认证功能的实现


Posted in Python onApril 04, 2019

最近在开发一个Django项目过程中,碰到了通过ldap认证用户登录的需求。由于之前都是自己写密码加密、用户登录等逻辑,连Django自带的认证模块都没用过,无奈网上关于django配置ldp的资料实在不全。因此,自己摸索了一种简单的实现方式,记录于此。

开发环境

Centos7.2下安装pycharm,并通过X转发至Winodws桌面进行开发

安装pyenv,使用virtualenv 3.6.2 Archives

安装开发过程中需要用到的第三方库,django, mysqlclient等等....这里就不多赘述了

若需参考django开发环境配置和django项目的部署,可以参考我另外一篇文章

python-ldap的安装

python-ldap的安装是最大的坑点。

  1. 使用pip安装python-ldap时,会报缺少ConfigParser库文件的错误,于是先用pip安装ConfigParser。
  2. 但是,python3中ConfigParser改名成了configparser。依旧没法安装,会报No model named ConfigParser。解决方法是到:/root/.pyenv/versions/3.6.2/lib/python3.6目录(这是我的pyenv目录)下,将configparser.py复制一份并改名为ConfigParser.py。
  3. 解决了以上两点后,如果直接使用pip install python-ldap。默认的python-ldap版本会报gcc的编译错误,最后指定版本pip install python-ldap==3.0.0b4解决,这才成功安装上python-ldap依赖。

ldap认证实现思路

如果一个项目的用户登陆要通过ldap,那么这个项目一般就是公司内部项目,例如OA系统,运维平台等。那么,我们可以将用户输入账号、密码信息发给ldap服务器进行认证。如果ldap认证通过,我们去查询数据库中是否已存在此账号的用户,若存在,直接跳转登陆即可,若不存在,则先在数据库中创建此用户,随后跳转登陆。如果ldap认证失败,提示错误信息并返回登陆页即可。有了这样的思路,我们的代码就很简单了。

ldap认证代码 auth.py

初始化连接,bind认证账号密码。如果bind成功,就返回True,若bind报错,就返回False。

import ldap
def auth_user(user, passwd):
  conn = ldap.initialize("ldap://IP:PORT")
  try:
    conn.simple_bind_s(user, passwd)
    return 1
  except:
    return 0

登陆的view代码

拿到form中用户输入的账号、密码。调用User对象的login方法,验证成功,就跳转登陆,否则,就提示错误并返回登陆页面。

def login(request):
  name = request.POST.get('username')
  password = request.POST.get('userpassword')
  user = User.login(name, password)
  if user:
    ...
    return redirect('user:users')
  else:
    context = {}
    context['name'] = name
    context['error'] = '用户名或密码错误'
    return render(request, 'user/login.html', context)

User对象的Login方法代码

login方法提供了登陆验证功能。调用auth_user函数,传入user,password参数,注意用户名前需要添加本地域名Domain:\。

@classmethod
  def login(cls, name, password):
    username = 'Domain\\' + name
    ret = auth_user(username, password)
    # password correct
    if ret:
      try:
        user = User.objects.get(name=name)
        return user
      except ObjectDoesNotExist as e:
        user = User()
        user.name = name
        user.save()
        return user
    # password error
    else:
      return None

怎么样,这就实现了在django中通过ldap验证用户登陆的功能,是不是比在settings里配置ldap来导入用户信息要方便的多?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
教你安装python Django(图文)
Nov 04 Python
python通过scapy获取局域网所有主机mac地址示例
May 04 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
python 实现登录网页的操作方法
May 11 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
python覆盖写入,追加写入的实例
Jun 26 Python
在python中用url_for构造URL的方法
Jul 25 Python
python实发邮件实例详解
Nov 11 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 #Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 #Python
详解python项目实战:模拟登陆CSDN
Apr 04 #Python
Python实现字符串匹配的KMP算法
Apr 04 #Python
Python GUI编程完整示例
Apr 04 #Python
Python使用sax模块解析XML文件示例
Apr 04 #Python
详解小白之KMP算法及python实现
Apr 04 #Python
You might like
如何开始收听短波广播
2021/03/01 无线电
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Selenium定位元素操作示例
2018/08/10 Python
python实现求特征选择的信息增益
2018/12/18 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
升职自荐信
2013/11/28 职场文书
新书吧创业计划书
2014/01/31 职场文书
体育比赛口号
2014/06/09 职场文书
2014年工会工作总结
2014/11/12 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
爱国影片观后感
2015/06/18 职场文书
《称赞》教学反思
2016/02/17 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
导游词之湖北武当山
2019/09/23 职场文书
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL