Python Flask前端自動登錄功能實現詳解

引言

在已有的網站中,幾乎所有的網站都已經實現瞭 自動登錄

所謂自動登錄,其實就是在你登錄後,然後關閉瀏覽器,接著再啟動瀏覽器重新進入剛剛的網站時,無需自己再次登錄。更準確的說,在一段時間內,無需自己再次登錄

思路:其實所謂的自動登錄,到最後的後端邏輯,和你正常的登錄邏輯是一樣的,也是判斷用戶名和密碼是否正確。隻是我們要省略讓用戶再次輸入用戶名和密碼的步驟,那麼肯定就要將用戶名和密碼存儲在一個地方。當檢測到用戶再次進入時,看看是否滿足可以自動登錄的條件,滿足的話,將保存的用戶名和密碼取出來,幫用戶自動登錄。那我們就要去想,將用戶名和密碼存儲到什麼地方

在本篇文章中,本人會在 Flask 項目中使用 ** session + cookie** 的方式,實現上述的功能

實現的方式有很多種,下面的隻是其中一種,大傢可以自己的需求進行改造和拓展

1. 登錄時

登錄,前端傳來用戶名和密碼,然後去後端進行驗證。如果用戶名和密碼都正確,則正常登錄

此時,我們需要把用戶名、密碼存進 cookie 中,然後在 session 存儲一個是否已經登錄的標識

重要的話說三次:

存儲密碼時,記得加密!

存儲密碼時,記得加密!

存儲密碼時,記得加密!

參考代碼如下

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'  //  是否已經登錄的標識
        session['username'] = username  //  根據自己的需求,在session裡存儲一些值
        # 將Cookie寫入瀏覽器
        response = make_response('login-pass')  //  登錄成功,返回給前端的值
        response.set_cookie('username', username, max_age=30*24*3600)  //  max_age,cookie的存活時間,這裡表示一個月
        response.set_cookie('password', password, max_age=30*24*3600)
        return response
    else:
        return 'login-fail'  //  登錄失敗,返回給前端的值

2. 定義全局攔截器

這個時候,可能會有人有疑問,為什麼要使用攔截器?

試想:進入一個網站有多個入口,你知道用戶會以哪個入口來訪問你的網站嗎?那我們總不能每一個進入網站的接口都去寫一份自動登錄的邏輯代碼吧。所以我們可以直接使用攔截器,將所有的請求都攔截起來,進行統一的處理。然後將靜態的資源和不用進行自動登錄邏輯處理的請求過濾掉即可

在程序的主入口 main.py 定義一個攔截器

# 定義全局攔截器,實現自動登錄
@app.before_request
def before():
    url = request.path
    pass_list = ['/user', '/login', 'logout']  //  不用進行自動登錄邏輯判斷的請求
    if url in pass_list or url.endswith('.js') or url.endswith('.jpg'):
        pass  //  過濾不用進行自動登錄邏輯處理的請求和靜態的資源
    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'  //  是否已經登錄的標識
        			session['username'] = username  //  根據自己的需求,在session裡存儲一些值

3. 退出登錄時

退出登錄時,清空 session 和 cookie

from flask import make_response, session, request, url_for
@user.route('/logout')
def logout():
    # 清空session和Cookie,頁面跳轉
    session.clear()
    response = make_response('註銷並進行重定向', 302)  # 302狀態碼表示重定向
    # 兩種重定向的方法
    # response.headers['Location'] = '/'
    response.headers['Location'] = url_for('index.home')  # 另一種方式,括號裡的值寫請求為“/” 的 - Blueprint名.方法名
    # 兩種清除cookie的方式
    response.delete_cookie('username')
    response.set_cookie('password', '', max_age=0)
    return response

上面第二種重定向方式中,所對應的值

index = Blueprint("index", __name__)
@index.route('/')
def home():
    ......  //  自己的邏輯處理

到此這篇關於Python Flask前端自動登錄功能實現詳解的文章就介紹到這瞭,更多相關Python Flask自動登錄內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: