我是网络开发的新手,我正在尝试使用烧瓶进行学校项目的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()))
答案 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