登录后使用标头中的标记进行Flask重定向

时间:2017-12-04 17:31:44

标签: python http flask

我是网络开发的新手,我正在尝试使用烧瓶进行学校项目的Web服务器。问题是,登录后,我想重定向到需要身份验证的另一个页面,并通过标头传递授权令牌。但是,页面冻结,显示重定向... 并说我应该自动重定向(这不会发生)。

这是登录POST和重定向页面的代码。

@app.route('/login', methods=['POST'])
def login_verify():
    username = models.User.query.get(request.form['username'])
    if username == None or username.verify_password(request.form['password']) == False:
        abort(401)
    redir = redirect(url_for('map'))
    redir.headers = {'headers':username.encode_auth_token()}
    return redir

@app.route('/map')
def map():
    token = request.headers.get('headers')
    if token == None or models.User.decode_auth_token(token) == None:
        abort(403)
    deviceList = list(db.session.query(models.Location.terminalId.distinct()).all())
    return render_template('seeLocations.html',token = str(token),deviceList =  deviceList)

我也尝试了这个(并且工作过),但是令牌不应该作为URL参数出现。

return redirect(url_for('map',headers=username.encode_auth_token()))

2 个答案:

答案 0 :(得分:1)

您可以使用会话来完成您正在寻找的内容

在您的登录信息中,您可以将一个令牌保存到会话中,以后可以在您的路线中根据需要进行映射。

session['token] = token

要获得它的价值,你可以使用

您可以通过

在程序中的任何位置访问它
variable = session['token']

从您可以使用的会话中取消设置值和键

session.pop('token' none)

更多关于烧瓶会议here

答案 1 :(得分:0)

这里遇到的主要问题是您覆盖了重定向响应的headers。此响应的标头设置为Location,以告诉客户端下一步该怎么做,但是您在分配任务后便将其清除。这也是客户端不自动重定向的原因。

我认为您想要的,并且会起作用的是:

def login_verify():
    ...
    redir = redirect(url_for('map'))
    redir.headers['headers'] = username.encode_auth_token()
    return redir