Python 在Flask登录时禁用从多个不同位置同时登录
我有一个用英文写的Web服务。用户A使用一些用户名登录到服务。我希望在用户A的会话过期之前,用户B不可能使用相同的用户名登录。换句话说,我想禁用每个用户的并发登录。如何在中执行此操作?您需要在数据库中的用户模型中存储某种会话令牌Python 在Flask登录时禁用从多个不同位置同时登录,python,authentication,flask,flask-login,Python,Authentication,Flask,Flask Login,我有一个用英文写的Web服务。用户A使用一些用户名登录到服务。我希望在用户A的会话过期之前,用户B不可能使用相同的用户名登录。换句话说,我想禁用每个用户的并发登录。如何在中执行此操作?您需要在数据库中的用户模型中存储某种会话令牌 class User(db.Model): .... session_token = db.Column(db.String(40), index=True) 当用户登录时,您将生成会话令牌并将其保存在数据库中 class User(db.Model
class User(db.Model):
....
session_token = db.Column(db.String(40), index=True)
当用户登录时,您将生成会话令牌并将其保存在数据库中
class User(db.Model):
....
session_token = db.Column(db.String(40), index=True)
更新您的用户。获取\u id
函数以返回会话令牌,而不是用户id
def get_id(self):
return str(self.session_token)
在user\u loader
回调中,根据令牌查找用户:
@lm.user_loader
def load_user(session_token):
return User.query.filter_by(session_token=session_token).first()
通过此设置,令牌将在每次登录时更新,这将自动使以前的会话无效
当用户A登录时,请将该信息保存在服务器端(数据库、文件等),如果用户已登录,则在登录前始终检查服务器端的信息。您知道在哪里实施此操作的示例吗?我明白这个想法,但我想确保我能做得正确。有人能想出这个办法吗?谢谢,这很有效。有没有办法允许最多2台设备同时登录?我尝试在调用
login\u user()
后立即生成并存储会话令牌,但在会话令牌有机会设置之前调用了get\u id()
。我想在返回login\u user()
后设置会话令牌,这样我可以保证登录流工作正常。我曾经捕获何时存储使用生成的会话令牌。但是通知发生在调用get\u id()
后。我发现的唯一可行的方法是在调用login\u user()
之前手动生成会话令牌并将其存储在数据库中,但这样应用程序的行为可能会不一致。