【发布时间】:2015-05-27 23:39:26
【问题描述】:
我正在使用(真棒)Flask framework 构建一个网站,其中一些路由受到 flask-login @login_required 装饰器的保护,如下所示:
@app.route('/awesomepage')
@login_required # <-- this is what I mean
def awesome_page():
return render_template('awesome.html')
当有人注销时,他通常会被重定向到他按下注销时正在查看的页面。但是,当一个人从需要登录的页面(即具有@login_required 装饰器的页面)注销时,他在注销后会收到 401 Unauthorized 错误。因此,当将用户重定向回原始页面时,我想检查他们来自的页面是否有 @login_required 装饰器,如果有,则将他们重定向到首页。
我当前的注销视图如下所示:
@app.route('/logout')
def logout():
logout_user()
next_url = request.args.get('next') or request.referrer or url_for('index')
return redirect(next_url)
所以在这段代码中,我想检查request.referrer 是否有@login_required 装饰器。有人知道我该怎么做吗?欢迎所有提示!
【问题讨论】:
-
你不能通过setting a login view 绕过这个问题,让用户被重定向到那里而不是抛出 401 吗?
-
如果 所有 装饰方法都在一个类中,您可以查找它们的行号以查找它们的第一行代码,如果它们被装饰,则该代码会发生变化,但这很奇怪做事的方式:) 基本上你可以保留一个与装饰器函数代码的第一行号相对应的行号字典,然后使用它来将函数“映射”到它们的装饰器。
标签: python flask decorator python-decorators flask-login