Flask-login 重定向回登录页面
Flask-login redirecting back to login page
我正在使用 flask-login 和 flask-mongoengine 编写一个简单的 flask 应用程序,一切正常,直到我更新了项目所需的所有 python 插件。现在 flask 不会让我登录。当我登录并验证表单时,它 returns 我到登录页面,带有 url: http://localhost:5000/auth/login?next=%2Findex ... 我认为 %2F
可能与此问题有关。
这是我的登录视图:
@bp.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('main.index'))
form = LoginForm()
if form.validate_on_submit():
user = User.objects(username__exact=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('auth.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('main.index')
return redirect(next_page)
return render_template('auth/login.html', title=_('Sign In'), form=form)
我正在使用 WTForms,我可以确认表单 action=""
这是改编自 flask megatutorial,但我使用的是 MongoDB。
问题已解决!
当我将应用程序从使用 SQL 转换为 MongoDB 时,我错误地将 load_user 函数设置为:
@login.user_loader
def load_user(username):
return User.objects(username__exact=username).first()
但实际上 load_user 函数需要接受 id
字段作为接口,因此函数应该如下所示:
@login.user_loader
def load_user(id):
return User.objects.get(id=id)
我正在使用 flask-login 和 flask-mongoengine 编写一个简单的 flask 应用程序,一切正常,直到我更新了项目所需的所有 python 插件。现在 flask 不会让我登录。当我登录并验证表单时,它 returns 我到登录页面,带有 url: http://localhost:5000/auth/login?next=%2Findex ... 我认为 %2F
可能与此问题有关。
这是我的登录视图:
@bp.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('main.index'))
form = LoginForm()
if form.validate_on_submit():
user = User.objects(username__exact=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('auth.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('main.index')
return redirect(next_page)
return render_template('auth/login.html', title=_('Sign In'), form=form)
我正在使用 WTForms,我可以确认表单 action=""
这是改编自 flask megatutorial,但我使用的是 MongoDB。
问题已解决!
当我将应用程序从使用 SQL 转换为 MongoDB 时,我错误地将 load_user 函数设置为:
@login.user_loader
def load_user(username):
return User.objects(username__exact=username).first()
但实际上 load_user 函数需要接受 id
字段作为接口,因此函数应该如下所示:
@login.user_loader
def load_user(id):
return User.objects.get(id=id)