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)