一般來說,它們都是相似的,但其中一些具有比其他更多的功能。例如,Flask-Security非常繁重,帶有許多額外的安全功能,如額外加密。事實上,Flask-Security包含Flask-Principal作爲子集。 Flask-Principal可以使用Flask-Login進行身份驗證,即使這只是一個選項。所以你可以看到它們都是相關的,但有些是彼此的子集或超集。
現在在您的具體情況下,您已經在使用Flask-Login,它非常出色。如果您需要添加Flask-Login不支持的用戶角色,我建議您擴展您的用戶模型以添加角色列,然後覆蓋login_required裝飾器。如果您嘗試使用Flask-Security等擴展程序,可能會導致您的情況過度。
舉例來說,我將用角色字段擴展我的用戶類。它可以有值「任何」,「管理員」等任何手段無關緊要。
class User(UserMixin):
def get_role():
return rolename
我會用它覆蓋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_user.get_role()
if ((urole != role) and (role != "ANY")):
logout_user()
return current_app.login_manager.unauthorized()
return fn(*args, **kwargs)
return decorated_view
return wrapper