我正在编写一个应用程序,该应用程序具有多个充当用户的类(例如,学校帐户和员工帐户)。我正在尝试使用 Flask-Login 来简化此操作,但我不太确定如何实现,这样当用户登录时,我可以让我的应用程序检查用户名是否属于学校帐户或员工帐户,然后正确登录。
我知道如何确定它属于哪个类型帐户(因为所有用户名都必须是唯一的)。但在那之后,我不确定如何告诉应用程序我希望它登录该特定用户。
目前,我只有一个通用登录页面。如果我为员工帐户和学校帐户创建单独的登录页面会更容易吗?我通过 Flask-SQLAlchemy 使用 MySQL 数据库。
最佳答案
您可以为每个用户定义一个特定的角色。例如,用户“x”可以是 SCHOOL,而用户“y”可以是“STAFF”。
class User(db.Model):
__tablename__ = 'User'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(80),unique=True)
pwd_hash = db.Column(db.String(200))
email = db.Column(db.String(256),unique=True)
is_active = db.Column(db.Boolean,default=False)
urole = db.Column(db.String(80))
def __init__(self,username,pwd_hash,email,is_active,urole):
self.username = username
self.pwd_hash = pwd_hash
self.email = email
self.is_active = is_active
self.urole = urole
def get_id(self):
return self.id
def is_active(self):
return self.is_active
def activate_user(self):
self.is_active = True
def get_username(self):
return self.username
def get_urole(self):
return self.urole
Flask-login 但是还没有用户角色的概念,我编写了自己的 login_required 装饰器版本来覆盖它。所以你可能想使用类似的东西:
def login_required(role="ANY"):
def wrapper(fn):
@wraps(fn)
def decorated_view(*args, **kwargs):
if not current_user.is_authenticated():
return current_app.login_manager.unauthorized()
urole = current_app.login_manager.reload_user().get_urole()
if ( (urole != role) and (role != "ANY")):
return current_app.login_manager.unauthorized()
return fn(*args, **kwargs)
return decorated_view
return wrapper
然后,您可以在 View 函数上使用此装饰器,例如:
@app.route('/school/')
@login_required(role="SCHOOL")
def restricted_view_for_school():
pass
关于python - 使用多个用户类实现 Flask-Login,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871391/