Подтвердить что ты не робот

Flask-Login: не работает на локальной машине, но отлично работает на хостинге

У меня есть флеш-приложение, и я использую флеш-логин, следуя учебникам (здесь ничего не интересно)

  • отлично работает на хостинге
  • отлично работает на моем локальном компьютере MAC (дома)
  • не работает на моем локальном компьютере Linux (в офисе, который может находиться за брандмауэром, но я могу выполнять переадресацию и подключение к базе данных).

.

from flask.ext.login import LoginManager 

login_manager = LoginManager()
login_manager.session_protection = "strong"
login_manager.init_app(app)
login_manager.login_view = 'login'

def login():
    error = None
    form = LoginForm()

    if request.method == 'POST':
        user = db.users.find_one({"username": form.username.data})
        pass_hash = generate_password_hash(form.password.data)

        if user and User.validate_login( pass_hash,  user['password'] ):
            user_obj = User(user['username'])
            session['logged_in'] = True
            login_user(user_obj,remember=True)
            flash("Logged in successfully", category='success')
            print 'logged in: OK'

            #return redirect(request.args.get("next") or url_for("index"))
            return redirect( url_for("index"))
        error = 'Invalid credentials'
    return render_template('login.html', title='login', **locals())

Хорошо, когда я неправильно ввожу пароль, он дает ошибку "Неверные учетные данные". Когда я правильно ввожу свой пароль, я не вижу "Записал успешно" , но на консоли я вижу "в системе" ОК ". Таким образом, нет проблем с подключением БД. Однако я не авторизовался. Например,

g.user.is_authenticated()

дает false в шаблоне (это происходит только на моем локальном Linux, с другой стороны, хостинг и MAC успешно регистрируются пользователем).

4b9b3361

Ответ 1

Где и как вы сохраняете сеанс в браузере?

Рассмотрим сеанс, хранящийся в cookie-браузере для производственного домена example.com, который вы также настроили локально (добавив переопределение в ваш файл /etc/hosts).

Если ваш офисный сервер настроен на использование другого субдомена, например office.example.com и REMEMBER_COOKIE_DOMAIN установлен на example.com, офисный сервер не сможет прочитать файл cookie. Исправление заключается в использовании файла cookie с несколькими доменами: REMEMBER_COOKIE_DOMAIN=.example.com (обратите внимание на предыдущую точку).

Ссылка: https://flask-login.readthedocs.org/en/latest/#cookie-settings

Ответ 2

С сеансами происходит управление сеансом...

  • Используете ли вы управление сеансом на основе клиента?
  • Используете ли вы управление сеансом на сервере (например, flask-kvsession)?
    • возможные проблемы, пытающиеся получить доступ к тому же бэкэнду, что и prod, например. брандмауэр, предотвращающий доступ к серверу redis.

Возможно, вы пытаетесь сохранить больше данных сеанса при попадании на ваш dev-сервер (например, более длинные серверные URL-адреса, данные отладки и т.д.), что может быть больно иметь дело, когда управление сеансом выполняется на клиент.