标题可能描述的不太清理,就是例如我在before_request中检测用户登录状态,当用户没有登录就转向/login登录页面,但是这里就有一个问题,当/login登录跳转的页面也会触发before_request,这个时候还没完成登录动作,session也没保存,当然就不是登录状态,所以又转向了/login登录页面,从而造成了死循环,那么我们就需要在before_request请求的方法中添加一些这种特定的路由,对他们进行放行
示例代码如下
@app.before_request
def verify_login():
if "name" not in session and request.endpoint != "login":
return redirect(url_for('login'))这样在没有保存session会话状态的时候,会被定向到/login页面
下面是我实现的拦截器
在setting中先配置需要放行的url和常见的静态资源
PASS_URL = ["/login", "/login_check"] PASS_SUFFIX = ["png", "jpg", "css", "js", "html", "svg", "ico"]
然后主要的还是依靠before_request这个钩子实现的
@app.before_request
def verify_login():
# 同时满足endpoint不在放行页面和未登录状态定向到登录页
if request.path not in current_app.config["PASS_URL"] and "name" not in session:
return redirect(url_for('login'), 301)
# 放行静态资源
if request.url.split(".")[-1] in current_app.config["PASS_SUFFIX"]:
pass内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/865
评论列表