2

У меня есть эта охраняемая область администратора под /admin/. Пользователи должны войти в систему, через HTTP basic auth (http_basic набор для true в security.yml).Как сделать SF2/FOSUserBundle снова запрашивать пароль при определенных действиях?

Моя цель состоит в том, для конкретных действий в конкретном контроллере, повторно запрашивает у пользователя его имя пользователя/пароль. Я думал, что это будет простой, но согласно моим исследованиям, кажется, это не так.

Я попытался unset как $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'], но, кажется, не имеют никакого эффекта. Я также попытался изменить header установить 401 код статуса, но это не влияет ни .

Как это может быть chievable?

+0

Прежде всего, мы не имеем дело с $ _SERVER в структуре Symfony2, у него есть специальная функциональность. Например. http://symfony.com/doc/current/components/http_foundation/introduction.html И на ваш вопрос: взгляните на этот http://stackoverflow.com/questions/13600280/programmatically-logout-current- user – forsberg

+0

Спасибо @forsberg за комментарий к моему вопросу и ссылку на документ SF. Однако в указанном вопросе OP удается выйти из системы, но этот трюк не заставляет приложение запрашивать новые учетные данные:/ – D4V1D

ответ

0

Прежде всего, базовая аутентификация HTTP НЕ предназначена для поддержки выхода из системы.

Это означает, что вы можете не гарантировать его в каждом браузере; даже с трюком 401 или с перенаправлением [email protected], чтобы аннулировать учетные данные.

См. this answer.

Так что это плохая привычка использовать его, когда вам нужно выйти из системы.


Вы должны использовать пользовательскую проверку подлинности, предоставленную FOSUserBundle, если вы хотите повторно задать учетные данные пользователя. И это довольно просто & безопасно.

+0

Большое спасибо за ответ. К сожалению, 'basic http auth' является требованием от моего босса, и я не могу изменить его для пользовательского auth. Есть ли другой способ для SF2 снова запрашивать учетные данные? – D4V1D

+0

С базовым auth, no. Вы можете использовать перенаправление для принудительного использования другого имени пользователя, например. в вашем контроллере 'return $ this-> redirect ('http: //'. $ randomUsername. '@'. $ request-> getHttpHost(). $ this-> generateUrl ('admin')', но результат будет зависеть от браузер ... – RSez

Смежные вопросы