Flask-логин, перенаправляющий обратно на страницу авторизации - PullRequest
0 голосов
/ 06 мая 2018

Я пишу простое приложение фляги, используя flask-login и flask-mongoengine, все работало нормально, пока я не обновил все плагины python, которые мне нужны для проекта. Теперь колба не будет входить в систему. Когда я вхожу в систему и форма проверяется, она возвращает меня на страницу входа с 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=""

Это адаптировано из мегаторума по колбам, но я использую MongoDB.

1 Ответ

0 голосов
/ 07 мая 2018

Проблема решена!

Когда я конвертировал приложение из 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)
...