5

我有一个用Flask编写的 Web 服务。用户 A 使用某个用户名登录服务。我希望用户 B 无法使用相同的用户名登录,直到用户 A 的会话过期。换句话说,我想禁用每个用户同时登录。我如何在Flask-Login中做到这一点?

4

1 回答 1

8

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

class User(db.Model):
    ....
    session_token = db.Column(db.String(40), index=True) 

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

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

def get_id(self):                                                           
    return str(self.session_token) 

在您的user_loader回调中,您根据令牌查找用户:

@lm.user_loader                                                                 
def load_user(session_token):                                                                                                                        
    return User.query.filter_by(session_token=session_token).first()

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

文档

于 2017-04-12T13:22:31.487 回答