flask login_required下一个参数不起作用

时间:2018-09-02 21:32:03

标签: flask flask-login

我遵循了miguel grinberg教程,现在我正在应用我在副项目中学到的东西,但是在所有情况下,我遇到了一个问题,我最初忽略了这个问题,并认为这是我的错误,但是经过调查我找不到为什么会发生这种行为,问题是当我尝试在未登录登录屏幕时尝试访问网站内的任何URL时,但是之后原始请求的页面未成功加载,并且烧瓶通过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 url,但是发生的是存在构建错误,例如以下内容

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):
    ....   

1 个答案:

答案 0 :(得分:0)

代替

return redirect(url_for(next_page))

您可能想要

return redirect(next_page)

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