flask login_required下一个参数不起作用

问题描述 投票:-1回答:1

我跟着米格尔·格林伯格教程,现在我正在应用我在侧面项目中学到的东西,但在所有情况下我都遇到了一些问题,我一开始就忽略了这个问题并认为这是我的错误,但经过调查我无法找到为什么这个行为发生了,问题是当我尝试访问网站内的任何网址而未登录登录屏幕时,但在此之后原始请求的网页未成功加载并烧坏了BuildError异常。

下面是我的代码示例

@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
    return redirect(url_for('index'))

form = LoginForm()

if form.validate_on_submit():
    user = User.query.filter_by(username= form.username.data).first()
    if user is None or not user.check_password(form.password.data):
        return redirect(url_for('login'))
    login_user(user)
    next_page = request.args.get('next')
    if not next_page or url_parse(next_page).netloc != '':
        return redirect(url_for('index'))

    return redirect(url_for(next_page))

return render_template('login.html', form=form)

你可以看到我正在获取下一个参数并进行一些安全检查,如果它存在,然后重定向到next_page网址,但会发生什么是存在构建错误,为了扩展如下所示

BuildError: Could not build url for endpoint u'/user/4556'. Did you mean
'user' instead?

而用户视图功能看起来像这样

@app.route('/user/<username>', methods=['GET'])
@login_required
def user(username):
    ....   
flask flask-login
1个回答
0
投票

代替

return redirect(url_for(next_page))

你可能想要的

return redirect(next_page)

您的“下一个”参数看起来像“/ user / 4556”,但您没有名为“/ user / 4556”的端点,因此您不希望将其传递给url_for。将字符串直接传递给重定向就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.