flask - flask login_required 下一个参数不起作用
问题描述
我遵循了 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):
....
解决方案
代替
return redirect(url_for(next_page))
你可能想要
return redirect(next_page)
您的“下一个”参数看起来像“/user/4556”,但您没有名为“/user/4556”的端点,因此您不想将其传递给url_for
. 将字符串直接传递给重定向就足够了。
推荐阅读
- php - 如何避免使用 Xdebug 进入供应商/框架代码?
- javascript - 如何解决 PHP 错误:注意:尝试访问 bool 类型值的数组偏移量
- amazon-web-services - 如何在 AWS 上的 rails 网站上运行我的 ruby?
- java - Eclipse 中的 OpenCV 4.3.0 java.lang.UnsatisfiedLinkError
- javascript - 是否可以将设备 ID 记录为 Firebase 中的唯一用户 ID?
- c++ - 无法使用 vcpkg 在 Windowsx64 Visual Studio Code 中下载 C++ 库
- python - 返回 False 三次而不是一次
- php - 60 秒后上传文件时出现错误请求 400
- c# - Visual Studio 2019 C# 突出显示不起作用?
- reactjs - 在尝试将图像从 res.data.photo 传递给 useContext 时,我收到无法读取未定义的属性“数据”