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