flask在before_request中添加特定路由到例外(拦截器)

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

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。