2014-04-29 117 views
2

我有一个写在Flask的Web服务。用户A使用一些用户名登录到服务。我希望用户B无法使用相同的用户名登录,直到用户A的会话过期。换句话说,我想禁用每个用户同时登录。我该怎么做Flask-Login禁止同时登录从Flask登录的多个不同地方登录

+0

当用户A登录时,保持在服务器端的信息(数据库,文件等),然后经常检查从服务器端的这些信息洛之前,如果用户已经登录。 – codegeek

+0

你知道这个实现的地方的例子吗?我明白了,但我想确保我可以正确地做到这一点 – themantalope

+0

有人能够解决这个问题吗? –

回答

2

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

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

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

更新您的函数以返回会话令牌而不是用户标识。

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() 

采用这种设置,令牌将在每次登录时,它会自动失效前几届会议进行更新。

Documentation