Symfony2: перенаправление на предыдущую страницу после входа в систему

#php #session #symfony #authentication #login

#php #сессия #symfony #аутентификация

Вопрос:

Я хочу сделать это:

Пользователь пытается получить доступ к личной странице (он должен быть зарегистрирован). Когда он пытается получить доступ, он не может получить доступ, потому что ранее он должен был ввести свои учетные данные. Он пишет свой пароль и входит в систему. Я хочу, чтобы пользователь был автоматически перенаправлен на страницу, к которой он пытался получить доступ.

Я ввел security.yml

 use_referer: true
  

И в моем первом контроллере я поставил:

 $this->getRequest()->headers->get('referer');
  

И я всегда получаю адрес входа в систему (… /login.php ). Вместо этого мне нужно получить, например (…/downloads/test.txt )

Я также пробовал с:

 $request->getSession()->get('_security.account.target_path');
  

Но я получаю null.

Как я могу это сделать?

Заранее спасибо!

— Редактировать с помощью security.yml —

 firewalls:
    frontend:
        pattern:     ^/*
        anonymous:   ~
        simple-form:  
            authenticator: my_authenticator
            check_path: login_check
            login_path: login
            use_referer: true
            failure_path: login_error
        logout:
            path:    logout
            target:  /
            success_handler: my_authenticator
        remember_me:
            key:       mykey
            lifetime:  31536000

        switch_user: { role: ROLE_ADMIN, parameter: _login_as }

access_control:
    - { path: ^/web/login.php, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
    - { path: ^/web/login_error.php, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
    - { path: ^/*, roles: [ROLE_USUARIO, ROLE_RESELLER, ROLE_ADMIN], requires_channel: https }
  

Комментарии:

1. Можете ли вы добавить access_control часть своего security.yml ?

2. да, я добавил к своему исходному сообщению. Спасибо.

3. Если вы хотите, чтобы пользователь перенаправлял на URL-адрес за брандмауэром после успешной аутентификации, вам может use_referer вообще не понадобиться (как указано @colburton). Попробуйте удалить его.

4. $request->getSession()->get('_security.account.target_path'); вернется null , поскольку имя вашего брандмауэра — «интерфейс». Должно быть: $request->getSession()->get('_security.fronted.target_path');

5. Спасибо, но я удалил use_referer, поведение осталось прежним. И с помощью $request-> getSession()->get(‘_security. fronted.target_path’); Я тоже всегда получаю null. 🙁

Ответ №1:

Symfony2 сделает это по умолчанию. Вы указываете URL-адрес для перехода только в том случае, если пользователь переходит непосредственно на страницу входа в систему (например, с помощью закладки).

Проверьте это, как установить «брандмауэр» с таким поведением: безопасность symfony

Комментарии:

1. Спасибо, но для меня это поведение не работает, я добавил свою конфигурацию брандмауэра в свой исходный пост. Спасибо.

2. для check_path и login_path требуются маршруты, определенные в routes.yml (или в другом месте), а не фактические файлы.

3. хорошо, я ввел check_path и login_path с моими маршрутизаторами, определенными в routing.yml (check_path: login_check и login_path: login), но система не перенаправляет меня на предыдущую страницу