欧美成人片一区二区三区,久久碰人妻一区二区三区,久久婷婷激情综合色综合俺也去,狂野欧美性猛交免费视频,久久夜色精品国产亚洲

13
2021/03

Django實(shí)現(xiàn)單點(diǎn)登錄(SSO)

發(fā)布時(shí)間:2021-03-13 10:32:19
發(fā)布者:已經(jīng)寫了
瀏覽量:
0

SSO簡(jiǎn)介

單點(diǎn)登錄(Single Sign On)功能是一個(gè)非常常用的功能,尤其是我們?cè)诙鄠€(gè)系統(tǒng)之間需要登錄同步的時(shí)候,例如我們?cè)诘卿決Q空間后,再去QQ的其他網(wǎng)站,都是默認(rèn)登錄的狀態(tài),這就是單點(diǎn)登錄。

單點(diǎn)登錄有很多種實(shí)現(xiàn)方法,這里介紹一個(gè)通過共享session的實(shí)現(xiàn)方法。實(shí)現(xiàn)共享session要做的就是要讓多個(gè)不同應(yīng)用共用同一個(gè)session,但是session默認(rèn)的是每個(gè)應(yīng)用一個(gè)獨(dú)立的session和cookie的,所以這里要對(duì)session的存儲(chǔ)進(jìn)行配置。

除了默認(rèn)的session存儲(chǔ),我也可以設(shè)置讓session存儲(chǔ)在文件、緩存或者數(shù)據(jù)庫(kù)中。

如果我們讓session存儲(chǔ)在一個(gè)固定位置或者數(shù)據(jù)庫(kù)中,然后我們?cè)O(shè)置各個(gè)應(yīng)用cookie的domain為父域地址即可實(shí)現(xiàn)各個(gè)cookie的相同,從而時(shí)候各個(gè)cookie中存儲(chǔ)的sessionID一致。

搭建測(cè)試環(huán)境

下面我們來創(chuàng)建兩個(gè)空的Django項(xiàng)目來進(jìn)行演示,SSO1和SSO2,這里采用pycharm直接創(chuàng)建兩個(gè)Django項(xiàng)目,也可以在命令行中使用django-admin startproject sso來創(chuàng)建,其中sso是創(chuàng)建的項(xiàng)目名稱。這里也可以使用兩個(gè)完全相同的項(xiàng)目,在不同地址啟動(dòng),但是為了演示效果,這里創(chuàng)建了2個(gè)。

Django實(shí)現(xiàn)單點(diǎn)登錄

創(chuàng)建好兩個(gè)項(xiàng)目后,我們要給項(xiàng)目寫一個(gè)模擬的登錄,注銷的功能。

在templates文件夾下創(chuàng)建文件login.html文件。這里直接使用之前寫過的登錄頁面的代碼,樣式就不加了,在SSO1和SSO2中都加入login.html,具體代碼為:

然后在SSO1文件夾創(chuàng)建一個(gè)view.py文件,用來存放視圖函數(shù)。

創(chuàng)建文件后的文件目錄為:

插入一個(gè)小BUG

macbook運(yùn)行環(huán)境,pycharm創(chuàng)建的Django應(yīng)用有時(shí)候初始化有個(gè)bug,缺少os庫(kù),會(huì)報(bào)錯(cuò):

Django實(shí)現(xiàn)單點(diǎn)登錄

如果有這個(gè)報(bào)錯(cuò)的話,在setting.py中導(dǎo)入os即可:import os

然后我們?cè)趦蓚€(gè)項(xiàng)目的view.py中寫入登錄和注銷函數(shù):

Django實(shí)現(xiàn)單點(diǎn)登錄

在url.py中添加路由信息:

Django實(shí)現(xiàn)單點(diǎn)登錄

Django默認(rèn)配置了csrf,需要將它注釋掉,在settings.py文件中搜csrf,然后注釋掉。

然后分別為兩個(gè)項(xiàng)目做數(shù)據(jù)庫(kù)遷移,創(chuàng)建一些Django項(xiàng)目的基礎(chǔ)庫(kù):

python3 manage.py migrate

兩個(gè)項(xiàng)目都是同樣的配置,這樣我們目前兩個(gè)測(cè)試的項(xiàng)目就搭建好了,然后我們分別啟動(dòng)他們?cè)诓煌亩丝?。這里我們就直接手動(dòng)啟動(dòng)了,分別啟動(dòng)在5000和6000端口。

python3 manage.py runserver 127.0.0.1:5000
python3 manage.py runserver 127.0.0.1:7000

啟動(dòng)兩個(gè)項(xiàng)目:

Django實(shí)現(xiàn)單點(diǎn)登錄

現(xiàn)在我們分別在瀏覽器中打開http://127.0.0.1:5000/login/和http://127.0.0.1:7000/login/,顯示的頁面都是登錄頁面,顯示如下:

Django實(shí)現(xiàn)單點(diǎn)登錄

這時(shí)我們?cè)趆ttp://127.0.0.1:5000/login/隨意輸入賬戶密碼點(diǎn)擊登錄,顯示:

  • usr:username,password:123123,sessionid:None,cookie:{'csrftoken': '8YPasFGJUKDfsdH6kdFZzr9TkDtdVTKflgDDeIn0wgGC6cAeudcasdDSFEAIxX'}

此時(shí)我們進(jìn)入http://127.0.0.1:7000/login/,發(fā)現(xiàn)這個(gè)應(yīng)用中,顯示的還是之前的頁面,登錄沒有同步。下面我們來實(shí)現(xiàn)我們的SSO,這里的實(shí)現(xiàn)方法非常的簡(jiǎn)單:將session固定存儲(chǔ)在同一個(gè)文件中,

Django實(shí)現(xiàn)單點(diǎn)登錄

注意一下,這里配置的都是一樣的,但是如果兩個(gè)項(xiàng)目名稱不一樣的話,是不能直接將完整的settings.py直接復(fù)制到另一個(gè)的,因?yàn)槔锩嬗幸恍╉?xiàng)目的配置,例如ROOT_URLCONF = 'SSO1.urls'、WSGI_APPLICATION = 'SSO1.wsgi.application'這些前面的都是項(xiàng)目名,需要主要區(qū)分。

此時(shí)我們?cè)诖蜷_http://127.0.0.1:5000/login/,輸入賬號(hào)密碼,此頁面顯示:

  • usr:123,password:123,sessionid:2bs2nx2iq879epxu7au7o1zq63o095v7,cookie:{'sessionid': '2bs2nx2iq879epxu7au7o1zq63o095v7', 'csrftoken': '8YPzJbY03sHJUZH6kdFZzr9TkDtdVTKflgDDeIn0wgGC6cAeudcrkXLyIxXBEnzG'

此時(shí)我們?cè)诖蜷_http://127.0.0.1:7000/login/,我們直接訪問,而不用登錄,發(fā)現(xiàn)顯示同樣的內(nèi)容,即我們使用的是同樣的內(nèi)容,實(shí)現(xiàn)了SSO。

返回列表