Django項目中添加ldap登陸認證功能的實現(xiàn)
最近在開發(fā)一個Django項目過程中,碰到了通過ldap認證用戶登錄的需求。由于之前都是自己寫密碼加密、用戶登錄等邏輯,連Django自帶的認證模塊都沒用過,無奈網(wǎng)上關于django配置ldp的資料實在不全。因此,自己摸索了一種簡單的實現(xiàn)方式,記錄于此。
開發(fā)環(huán)境
Centos7.2下安裝pycharm,并通過X轉發(fā)至Winodws桌面進行開發(fā)
安裝pyenv,使用virtualenv 3.6.2 Archives
安裝開發(fā)過程中需要用到的第三方庫,django, mysqlclient等等....這里就不多贅述了
若需參考django開發(fā)環(huán)境配置和django項目的部署,可以參考我另外一篇文章
python-ldap的安裝
python-ldap的安裝是最大的坑點。
- 使用pip安裝python-ldap時,會報缺少ConfigParser庫文件的錯誤,于是先用pip安裝ConfigParser。
- 但是,python3中ConfigParser改名成了configparser。依舊沒法安裝,會報No model named ConfigParser。解決方法是到:/root/.pyenv/versions/3.6.2/lib/python3.6目錄(這是我的pyenv目錄)下,將configparser.py復制一份并改名為ConfigParser.py。
- 解決了以上兩點后,如果直接使用pip install python-ldap。默認的python-ldap版本會報gcc的編譯錯誤,最后指定版本pip install python-ldap==3.0.0b4解決,這才成功安裝上python-ldap依賴。
ldap認證實現(xiàn)思路
如果一個項目的用戶登陸要通過ldap,那么這個項目一般就是公司內部項目,例如OA系統(tǒng),運維平臺等。那么,我們可以將用戶輸入賬號、密碼信息發(fā)給ldap服務器進行認證。如果ldap認證通過,我們去查詢數(shù)據(jù)庫中是否已存在此賬號的用戶,若存在,直接跳轉登陸即可,若不存在,則先在數(shù)據(jù)庫中創(chuàng)建此用戶,隨后跳轉登陸。如果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函數(shù),傳入user,password參數(shù),注意用戶名前需要添加本地域名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
怎么樣,這就實現(xiàn)了在django中通過ldap驗證用戶登陸的功能,是不是比在settings里配置ldap來導入用戶信息要方便的多?
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
總結分析python數(shù)據(jù)化運營關聯(lián)規(guī)則
本文內容主要介紹了python數(shù)據(jù)化運營中關聯(lián)規(guī)則的一般應用場景,以及關聯(lián)規(guī)則的實現(xiàn),并例舉了適應的應用示例,方便大家更直觀的理解應用2021-08-08
解決python-docx打包之后找不到default.docx的問題
今天小編就為大家分享一篇解決python-docx打包之后找不到default.docx的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02

