如何提取身份验证以分离功能



我正在尝试实现一个简单的基于会话的身份验证检查,如下所示:

@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如何处理路线有关?这不是一笔大交易,但似乎是一个有利于未来参考的良好原则的答案。

不幸的是,flask会话只能在请求范围内工作。所以您不能超出请求处理功能。但是您可以制作一个简单的decorator来验证请求。

这个装饰器的例子已经在stackoverflow上了:https://stackoverflow.com/a/34499643/12181022

最新更新