代码之家  ›  专栏  ›  技术社区  ›  Drew M

Flask登录重定向回登录页面

  •  2
  • Drew M  · 技术社区  · 8 年前

    我正在使用flask登录和flask mongoengine编写一个简单的flask应用程序,在我更新项目所需的所有python插件之前,一切都很正常。现在flask不会让我登录。当我登录并验证表单时,它会将我返回到登录页面,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。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Drew M    8 年前

    问题解决了!

    当我将应用程序从使用SQL转换为MongoDB时,我错误地将load\u user函数设置为:

    @login.user_loader
    def load_user(username):
        return User.objects(username__exact=username).first()
    

    但实际上,load\u用户函数需要接受 id 字段作为接口,因此函数应如下所示:

    @login.user_loader
    def load_user(id):
        return User.objects.get(id=id)
    
    推荐文章