Python Flask前端自動(dòng)登錄功能實(shí)現(xiàn)詳解
引言
在已有的網(wǎng)站中,幾乎所有的網(wǎng)站都已經(jīng)實(shí)現(xiàn)了 自動(dòng)登錄
所謂自動(dòng)登錄,其實(shí)就是在你登錄后,然后關(guān)閉瀏覽器,接著再啟動(dòng)瀏覽器重新進(jìn)入剛剛的網(wǎng)站時(shí),無需自己再次登錄。更準(zhǔn)確的說,在一段時(shí)間內(nèi),無需自己再次登錄
思路:其實(shí)所謂的自動(dòng)登錄,到最后的后端邏輯,和你正常的登錄邏輯是一樣的,也是判斷用戶名和密碼是否正確。只是我們要省略讓用戶再次輸入用戶名和密碼的步驟,那么肯定就要將用戶名和密碼存儲(chǔ)在一個(gè)地方。當(dāng)檢測到用戶再次進(jìn)入時(shí),看看是否滿足可以自動(dòng)登錄的條件,滿足的話,將保存的用戶名和密碼取出來,幫用戶自動(dòng)登錄。那我們就要去想,將用戶名和密碼存儲(chǔ)到什么地方
在本篇文章中,本人會(huì)在 Flask 項(xiàng)目中使用 ** session + cookie** 的方式,實(shí)現(xiàn)上述的功能
實(shí)現(xiàn)的方式有很多種,下面的只是其中一種,大家可以自己的需求進(jìn)行改造和拓展
1. 登錄時(shí)
登錄,前端傳來用戶名和密碼,然后去后端進(jìn)行驗(yàn)證。如果用戶名和密碼都正確,則正常登錄
此時(shí),我們需要把用戶名、密碼存進(jìn) cookie 中,然后在 session 存儲(chǔ)一個(gè)是否已經(jīng)登錄的標(biāo)識(shí)
重要的話說三次:
存儲(chǔ)密碼時(shí),記得加密!
存儲(chǔ)密碼時(shí),記得加密!
存儲(chǔ)密碼時(shí),記得加密!
參考代碼如下
from flask import make_response, session, request @user.route('/login', methods=['POST']) def login(): username = request.form.get('username').strip() password = request.form.get('password').strip() ...... // 自己的邏輯處理 if 登錄成功: session['islogin'] = 'true' // 是否已經(jīng)登錄的標(biāo)識(shí) session['username'] = username // 根據(jù)自己的需求,在session里存儲(chǔ)一些值 # 將Cookie寫入瀏覽器 response = make_response('login-pass') // 登錄成功,返回給前端的值 response.set_cookie('username', username, max_age=30*24*3600) // max_age,cookie的存活時(shí)間,這里表示一個(gè)月 response.set_cookie('password', password, max_age=30*24*3600) return response else: return 'login-fail' // 登錄失敗,返回給前端的值
2. 定義全局?jǐn)r截器
這個(gè)時(shí)候,可能會(huì)有人有疑問,為什么要使用攔截器?
試想:進(jìn)入一個(gè)網(wǎng)站有多個(gè)入口,你知道用戶會(huì)以哪個(gè)入口來訪問你的網(wǎng)站嗎?那我們總不能每一個(gè)進(jìn)入網(wǎng)站的接口都去寫一份自動(dòng)登錄的邏輯代碼吧。所以我們可以直接使用攔截器,將所有的請(qǐng)求都攔截起來,進(jìn)行統(tǒng)一的處理。然后將靜態(tài)的資源和不用進(jìn)行自動(dòng)登錄邏輯處理的請(qǐng)求過濾掉即可
在程序的主入口 main.py 定義一個(gè)攔截器
# 定義全局?jǐn)r截器,實(shí)現(xiàn)自動(dòng)登錄 @app.before_request def before(): url = request.path pass_list = ['/user', '/login', 'logout'] // 不用進(jìn)行自動(dòng)登錄邏輯判斷的請(qǐng)求 if url in pass_list or url.endswith('.js') or url.endswith('.jpg'): pass // 過濾不用進(jìn)行自動(dòng)登錄邏輯處理的請(qǐng)求和靜態(tài)的資源 else: if session.get('islogin') is None: username = request.cookies.get('username') password = request.cookies.get('password') if username != None and password != None: ...... // 自己的邏輯處理 if 登錄成功: session['islogin'] = 'true' // 是否已經(jīng)登錄的標(biāo)識(shí) session['username'] = username // 根據(jù)自己的需求,在session里存儲(chǔ)一些值
3. 退出登錄時(shí)
退出登錄時(shí),清空 session 和 cookie
from flask import make_response, session, request, url_for @user.route('/logout') def logout(): # 清空session和Cookie,頁面跳轉(zhuǎn) session.clear() response = make_response('注銷并進(jìn)行重定向', 302) # 302狀態(tài)碼表示重定向 # 兩種重定向的方法 # response.headers['Location'] = '/' response.headers['Location'] = url_for('index.home') # 另一種方式,括號(hào)里的值寫請(qǐng)求為“/” 的 - Blueprint名.方法名 # 兩種清除cookie的方式 response.delete_cookie('username') response.set_cookie('password', '', max_age=0) return response
上面第二種重定向方式中,所對(duì)應(yīng)的值
index = Blueprint("index", __name__) @index.route('/') def home(): ...... // 自己的邏輯處理
到此這篇關(guān)于Python Flask前端自動(dòng)登錄功能實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Python Flask自動(dòng)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)規(guī)范化(歸一化)示例
這篇文章主要介紹了Python數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)規(guī)范化,簡單描述了數(shù)據(jù)規(guī)范化的原理、用法及相關(guān)操作技巧,需要的朋友可以參考下2019-01-01使用python的pandas讀取excel文件中的數(shù)據(jù)詳情
這篇文章主要介紹了使用python的pandas讀取excel文件中的數(shù)據(jù)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09python 基于selectors庫實(shí)現(xiàn)文件上傳與下載
這篇文章主要介紹了python 基于selectors庫實(shí)現(xiàn)文件上傳與下載的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12詳解python的幾種標(biāo)準(zhǔn)輸出重定向方式
這篇文章是基于Python2.7版本,介紹常見的幾種標(biāo)準(zhǔn)輸出(stdout)重定向方式。顯然,這些方式也適用于標(biāo)準(zhǔn)錯(cuò)誤重定向。學(xué)習(xí)python的小伙伴們可以參考借鑒。2016-08-08Django contrib auth authenticate函數(shù)源碼解析
這篇文章主要介紹了Django contrib auth authenticate函數(shù)源碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)的五子棋游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04