Flask-вход не перенаправляется на предыдущую страницу

Я видел довольно много вопросов с этим в виду, но не смог решить мою проблему. У меня есть приложение Flask с flask-login для управления сеансами. И, когда я пытаюсь просмотреть страницу без входа в систему, я перенаправляюсь на ссылку в виде /login/?next=%2Fsettings%2F

проблема в том, насколько я мог понять, что" следующий " аргумент содержит ту часть сайта, которая мне действительно нужна, но при отправке запроса в форму входа в систему это делается через POST, поэтому этот аргумент не больше для меня, чтобы перенаправить его.

Я пробовал использовать Request.path С запрос (и url), но оба просто возвращают /login/ как url-адрес/путь запроса, а не фактический /login/?next=xxx.

мой метод входа в систему выглядит следующим образом:

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        #getting the user
        user = User.get(request.form['username'])
        if user.user is None:
            return redirect('/login/')
        #actual login proces
        if user and check_password_hash(user.user.password, request.form['password']):
            login_user(user, remember=remember)
            #the redirection portion of the login process
            return redirect(request.path or ("/")) # I tried various options there but without success, like request.args['next'] and such

        return redirect('/login/')

    else:
        return redirect('/')

спасибо

2 ответов


request.path не то, что вы ищете. Он возвращает фактический путь URL-адреса. Итак, если Ваш URL-адрес /a/?b=c, потом request.path возвращает /a, а не c как вы ожидаете.

на


вы можете использовать сеансы mongoengine для передачи параметра 'next_url' с сеансом колбы (from flask import session). В файле py, где вы определяете свое приложение и login_manager:

from flask.ext.mongoengine import MongoEngineSessionInterface
app.session_interface = MongoEngineSessionInterface(db)

@login_manager.unauthorized_handler
def unauthorized_callback():
    session['next_url'] = request.path
    return redirect('/login/')

а затем в режиме входа в систему:

def login():
    # ... if success
    next_url = session.get('next_url', '/')
    session.clear()
    return redirect(next_url)