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。

以上!

 

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