我正在尝试实现基于会话的简单身份验证,如下所示:
@app.route("/home")
def home():
if session.get('userID') is None:
return redirect(url_for('login'))
return render_template('home.html', uname = session['user'], userID = session['userID'])
这可行,但是我想提取对它自己的函数的检查,并在多个路由中调用它,试图使代码保持DRY。当我替换
if session.get('userID') is None:
return redirect(url_for('login'))
使用auth_check()
并将签入位置移动到
def auth_check()
if session.get('userID') is None:
return redirect(url_for('login'))
留给我
@app.route("/home")
def home():
auth_check()
return render_template('home.html', uname = session['user'], userID = session['userID'])
当我加载没有会话的页面时,当我希望它像内联代码一样进行重定向时,会在会话名称上遇到关键错误。与Flask如何处理路线有关?交易规模不大,但似乎可以作为一个很好的原则供以后参考。
答案 0 :(得分:1)
不幸的是,flask会话仅在请求范围内起作用。因此,您不能超出请求处理功能。但是您可以制作一个简单的装饰器来验证请求。
此装饰器的示例已在stackoverflow上:https://stackoverflow.com/a/34499643/12181022