在Flask-Login上从多个不同位置禁用同时登录

Mir*_*lov 3 python authentication flask flask-login

我有一个用Flask编写的Web服务。用户A使用一些用户名登录服务。我希望用户B不能使用相同的用户名登录,直到用户A的会话过期。换句话说,我想禁用每个用户的并发,同时登录。如何在Flask-Login中进行操作

Mat*_*aly 5

您需要做的是在数据库的用户模型中存储某种会话令牌。

class User(db.Model):
    ....
    session_token = db.Column(db.String(40), index=True) 
Run Code Online (Sandbox Code Playgroud)

用户登录时,将生成会话令牌并将其保存在数据库中。

更新您的User.get_id函数以返回会话令牌,而不是用户ID。

def get_id(self):                                                           
    return str(self.session_token) 
Run Code Online (Sandbox Code Playgroud)

user_loader回调中,您基于令牌查找用户:

@lm.user_loader                                                                 
def load_user(session_token):                                                                                                                        
    return User.query.filter_by(session_token=session_token).first()
Run Code Online (Sandbox Code Playgroud)

使用此设置,令牌将在每次登录时更新,这将自动使以前的会话无效。

文献资料