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

时间:2019-02-13 17:07:01

标签: python authentication flask

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

@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如何处理路线有关?交易规模不大,但似乎可以作为一个很好的原则供以后参考。

1 个答案:

答案 0 :(得分:1)

不幸的是,flask会话仅在请求范围内起作用。因此,您不能超出请求处理功能。但是您可以制作一个简单的装饰器来验证请求。

此装饰器的示例已在stackoverflow上:https://stackoverflow.com/a/34499643/12181022