Почему после успешной авторизации перенаправляет на страницу авторизации при использовании Flask-Session?
Есть Flask приложение (пример):
import os
from flask import Flask, redirect, url_for, request
from flask_session import Session
from flask_login import (LoginManager, login_required, UserMixin,
login_user, logout_user, current_user)
os.replace = os.rename # python 2.7
class User(UserMixin):
def __init__(self, id, name):
self.id = id
self.name = name
app = Flask(__name__)
SECRET_KEY = 'super secret key'
SESSION_TYPE = 'filesystem'
app.config.from_object(__name__)
Session(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
admin = User(0, 'admin')
@login_manager.user_loader
def load_user(user_id):
return admin
@app.route('/')
@login_required
def index():
return '''
<h1>Hello World!</h1>
<a href="/logout">Logout</a>'''
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
if (request.form['username'] != 'admin'
or request.form['password'] != 'admin'):
return redirect(url_for('login'))
login_user(admin)
return redirect(url_for('index'))
if current_user.is_authenticated:
return redirect(url_for('index'))
return '''
<form action="" method="post">
<input type="text" placeholder="Username" name="username">
<input type="password" placeholder="Password" name="password">
<input type="submit" value="Login">
</form>'''
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
Почему, если инициализировать объект Session из модуля flask_session, то при успешной авторизации (данные пользователя введены корректно и метод login_user был вызван) после перехода на index сразу же происходит перенаправление на login.
127.0.0.1 - - [13/Jul/2021 14:01:56] "POST /login?next=%2F HTTP/1.1" 302 -
127.0.0.1 - - [13/Jul/2021 14:01:56] "GET / HTTP/1.1" 302 -
127.0.0.1 - - [13/Jul/2021 14:01:56] "GET /login?next=%2F HTTP/1.1" 200 -
Проблема пропадает, если для функции index убрать декоратор login_required (или не инициализировать Session).
Python 2.7.