Установка require_previous_session
немного косой, но может (надеюсь) можно объяснить с небольшим количеством кода.
Так ordinarilly, когда вы создали стандартную форму входа (как the docs), в вашем security.yml файле настройки брандмауэра с рисунком (например /user
), а также установить опцию anonymous
. Теперь вниз под вашим контролем доступа вы установите на страницу входа (скажем /user/login
), чтобы иметь роль IS_AUTHENTICATED_ANONYMOUSLY
, например, так:
firewalls:
default:
pattern: ^/user
anonymous: ~
form_login:
login_path: /user/login
check_path: /user/login_check
access_control:
- { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user, roles: ROLE_USER }
Теперь, что происходит, когда кто-то идет /user
это они получают пересылаемой в /user/login
; , но, когда они это сделают, у них будет сеанс, созданный для них (если они этого еще не сделали), и их назначенная роль будет anon
(вы можете проверить это на панели инструментов Symfony, когда она находится на /user/login
), как разрешено в разделе access_control
выше ,
Это означает, что когда кто-то входит в систему (т. Е. Отправляет учетные данные в /user/login_check
), у них уже будет создан сеанс для них, а require_previous_session
будет правдой.
Для большинства людей это нормально, и вам не придется беспокоиться об этой настройке. Однако, если вы начнете касаться краев компонента безопасности, например, создав собственный поставщик проверки подлинности или отключив защиту (security: false
для определенного шаблона, см. Брандмауэр по умолчанию dev
), вы можете столкнуться с этим проблема.
Насколько я знаю, нет штрафа за безопасность за отсутствие сеанса перед входом в систему - у меня есть производственные площадки, где это происходит. Однако есть преимущество в том, что вы можете использовать токены CSRF (cookbook entry) в форме входа для дополнительной безопасности, а это значит, что атаки на учетные записи пользователей намного сложнее.
Краткая версия: Я бы не стал беспокоиться о настройке этой опции, если она решает вашу проблему. В зависимости от размера вашего сайта может быть увеличение производительности для этого (если вы можете войти на весь сайт, но не прошедшим проверку подлинности пользователям не нужен сеанс), но с точки зрения безопасности вам должно быть хорошо.
Edit, пример сверху require_previous_session
значение ЛОЖЬ:
firewalls:
default:
pattern: ^/user
anonymous: ~
form_login:
login_path: /user/login
check_path: /user/login_check
require_previous_session: false
Не могли бы вы опубликовать свой security.yml файл, чтобы увидеть, как вы настроили его? – angelwally