python - Flask Login 登录后返回 302 状态码(不重定向到主页)
问题描述
尝试使用 Flask-Login 并输入我的登录信息时,我不断收到 302 状态码,如下所示
"POST /login HTTP/1.1" 302 -
后跟 200 状态码:
"GET /login HTTP/1.1" 200 -
这段代码前段时间运行良好,我查看了整个互联网(包括 StackOverflow)试图找到解决这个问题的方法,但没有找到解决方案。是的,使用烧瓶时有关于 302 状态码的帖子,但它们对我没有帮助。我正在使用的代码如下。
@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():
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):
flash('Invalid username or password')
return redirect(url_for('login'))
login_user(user, remember=form.remember_me.data)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('index')
return redirect(next_page)
return render_template('login.html', title='Sign In', form=form)
这就是我的索引路线的样子:
@app.route('/index')
@app.route('/')
def index():
return render_template('index.html')
解决方案
您的代码可以简化一点。例如,您有两次:if form.validate_on_submit():
这是您的代码的重构版本。请注意,return redirect(url_for('login'))
在登录失败的情况下不是必需的,因为您render_template
在最后会运行,并且在页面最初加载时(GET 请求)也是如此。由于您已经在登录例程中,因此重定向实际上没有意义。您所需要的只是调整执行流程。
@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):
flash('Invalid username or password')
else:
login_user(user, remember=form.remember_me.data)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('index')
return redirect(next_page)
return render_template('login.html', title='Sign In', form=form)
推荐阅读
- mysql - 检索值并从嵌套 Json 格式的表库中对它们求和 - SQL
- java - 如何在安卓中使用(RSA/ECB/PKCS1Padding)
- javascript - 如何在 React 中使用 Tailwind CSS 来配置 Create React App?
- javascript - 如何定义一个可以有多种形式的javascript属性?
- page-break - 如何让我的主题连续打印,每个主题后没有空白页
- ruby-on-rails - Elastic Search 取消长时间运行的任务
- django - 如何使用变量作为模型名称在 Django 中查询多个模型
- augmented-reality - 在 Vision 识别的坐标上叠加 3D 对象的最佳方式
- django - bundle.js.map Django + Vue构建中的意外令牌':'
- r - 使用 plot_grid 和 cowplot 删除 NULL 图上的标签