问题描述
我目前正在使用flask-login进行我的网站的身份验证。 我的模型是一个具有admin(boolean)属性的简单用户(具有ID,邮件等)。 我不需要两个以上的角色。
如果当前用户的admin属性值为“ True”,是否有任何方法可以检查路由?
我尝试了尝试使用自定义装饰器以及访问session ['admin']来解决此问题的方法,但这没有用。
解决方法
@Agung Wiyono评论Flask-Login提供了一个{
"size": 0,"aggs": {
"by_date": {
"terms": {
"field": "date"
},"aggs": {
"by_greatest": {
"scripted_metric": {
"init_script": """
state.field1_greatest = 0;
state.field2_greatest = 0;
state.field3_greatest = 0;
""","map_script": """
def v1 = doc['field1'].value;
def v2 = doc['field2'].value;
def v3 = doc['field3'].value;
// your comparison logic
""","combine_script": "state","reduce_script": "states"
}
}
}
}
}
}
变量,请参见docs。
在您的路线中,您可以执行以下操作:
current_user
如果您不想使用from flask_login import current_user
@app.route("/test")
@login_required
def test():
if current_user.admin:
print('user is admin')
# blah blah
装饰器:
login_required
如果要使用装饰器检查@app.route("/test")
def test():
if current_user.is_authenticated and current_user.admin:
print('user is authenticated and is an admin')
# blah blah
的管理值是否为current_user
:
True
此代码或多或少是def admin_role_required(func):
@wraps(func)
def decorated_view(*args,**kwargs):
if request.method in EXEMPT_METHODS:
return func(*args,**kwargs)
elif not current_user.admin:
abort(403)
return func(*args,**kwargs)
return decorated_view
的代码,除了它检查@login_required
属性的状态-参见source。
并如下使用。请注意,order of the decorators很重要。首先调用admin
,然后调用@login_required
。装饰器@admin_role_required
假设admin_role_required
已通过身份验证。如果首先调用current_user
,则admin_role_required
代理将没有属性current_user
,并且您将遇到错误。
admin