flask_login 實現多用戶角色登錄 多表 登錄 管理員 普通用戶 登錄

由於官方的flask_login 是基於用戶ID來存儲當前登錄用戶的,如官方demo:

如果有多個用戶角色,比如有父賬戶和子賬戶,在同一個瀏覽器下,父賬號登陸了,此時訪問子賬號的後臺,也是登錄狀態,因爲是基於ID來查詢用戶的,當然也可以讓2個角色的用戶ID不衝突,或者參考 flask_login_multi

我的需求也是實現用戶後臺登錄不衝突,登陸了父賬戶,即使子賬戶存在同樣的用戶ID,訪問子後臺,任需登錄,於是產生了一下解決辦法,

    @login_manager.user_loader
    def load_user(user_id):
        session_blueprint = session.get('blueprint')
        if session_blueprint == request.blueprint == 'sub':
            sub_user = SubUser.query.get(int(user_id))
            return sub_user
        elif session_blueprint == request.blueprint == 'home':
            home_user = User.query.get(int(user_id))
            return home_user
        else:
            return None

另外在父賬戶登錄時設置:

        # 記錄當前登錄的endpoint
        session['blueprint'] = request.blueprint

子賬戶同理:

        # 記錄當前登錄的endpoint
        session['blueprint'] = request.blueprint

由於登錄的時候纔會設置這個值,所以當你登錄了父賬戶,輸入子賬戶的後臺鏈接,

session_blueprint == request.blueprint == 'sub':
session_blueprint=home,判斷不成立,
session_blueprint == request.blueprint == 'home'

而 request.blueprint=sub ,同樣判斷不成立

返回None,則跳轉到登錄頁,避免了因賬戶ID相同產生未登錄也能訪問後臺的BUG。

以上!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章