标题可能描述的不太清理,就是例如我在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