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数据类型详解(一)字符串
May 08 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
Python面向对象之继承代码详解
Jan 29 Python
python如何在循环引用中管理内存
Mar 20 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
用Python逐行分析文件方法
Jan 28 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
python GUI模拟实现计算器
Jun 22 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
python自动化调用百度api解决验证码
Apr 13 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
为PHP初学者的8点有效建议
2010/11/20 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
开启PHP的伪静态模式
2015/12/31 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
遗传算法之Python实现代码
2017/10/10 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python urllib.request对象案例解析
2020/05/11 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
remote接口和home接口主要作用
2013/05/15 面试题
信息管理专业推荐信
2013/10/29 职场文书
经贸日语专业个人求职信范文
2013/12/28 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
城管大队整治方案
2014/05/06 职场文书
企业文化标语大全
2014/06/10 职场文书
青年教师听课心得体会
2016/01/15 职场文书
导游词之神仙居景区
2019/11/15 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL