#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), но система не перенаправляет меня на предыдущую страницу