我正在使用Python 3.4。我有这样的路线:烧瓶登录无法检测匿名用户
@user.route('/manage_users', methods=['GET'])
@login_required
@any_administrator_required
def manage_users():
print('lkjrd')
any_administrator_required
是像这样定义我的一个装饰:
def any_administrator_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.data['primary_administrator'] and not current_user.data['secondary_administrator']:
abort(403)
return f(*args, **kwargs)
return decorated_function
我的登录用户等级:
class LoggedInUser(UserMixin):
data = {}
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return str(self.data['user'])
我能去我的登录页面或注销页面登录并正常注销,但是当我去一条装有login_required
的路由未登录时,它不会重定向或用401终止。当我去/manage_users
当未登录时,它会传递login_required
修饰符并转到any_administrator_required
,因为匿名用户类不具有self.data
属性。我试着移动装饰器,以便它是这样的顺序:
@user.route('/manage_users', methods=['GET'])
@any_administrator_required
@login_required
def manage_users():
print('lkjrd')
但它仍然有同样的结果。我unauthorized_callback
:
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect(url_for('login', next=request.path))
我登录的代码片段:
logged_in_user = LoggedInUser()
logged_in_user.data = user_data
login_user(logged_in_user)
session['logged_in'] = True
我的退出路线:
@logout.route('/logout', methods=['GET'])
@login_required
def logout():
logout_user()
session.pop('logged_in', None)
return redirect(url_for('main'))
,当然还有,要/logout
而不是在刚登录重定向到主页面,没有401.
用户装载器:
@login_manager.user_loader
def load_user(user_id):
r = REQUEST_USER_DATA_FROM_API
logged_in_user = LoggedInUser()
logged_in_user.data = r.json()
return logged_in_user
什么是你['user_loader'(https://flask-login.readthedocs.org/en/latest/#flask.ext.login.LoginManager.user_loader)看起来像? – dirn