使用头中的令牌登录后进行Flask重定向

2024-05-29 00:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新的web开发人员,我正在为一个学校项目使用flask做一个web服务器。问题是,在登录之后,我想重定向到另一个需要身份验证的页面,并通过头传递授权令牌。但是,页面冻结,显示重定向…并说应该自动重定向(这不会发生)。

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

@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参数出现。

^{pr2}$

Tags: tokennonewebappmapmodelsrequestusername
2条回答

这里的主要问题是重写了重定向响应的headers。这个响应设置了类似Location这样的头来告诉客户机下一步要去哪里,但是您通过赋值将它们清除掉。这也是客户端不能自动重定向的原因。在

我想你想要的,也会起作用的是:

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

你可以利用这段时间来完成你想要的

在您的登录中,您可以将令牌保存到会话中,以后可以根据需要在路由中使用该令牌进行映射。在

session['token] = token

你可以利用它的价值

你可以在程序中的任何地方访问它

^{pr2}$

要从会话中取消设置值和键,可以使用

session.pop('token' none)

关于烧瓶会议的更多信息here

相关问题 更多 >

    热门问题