Я использую Symfony 4.3.2 на PHP 7.3.4
Вот мой security.yaml
security:
providers:
admin_provider:
entity:
class: App\Entity\Admin
property: username
user_provider:
entity:
class: App\Entity\User
property: username
chain_provider:
chain:
providers: [user_provider, admin_provider]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backoffice:
pattern: ^/
provider: admin_provider
anonymous: true
logout:
path: admin.logout
target: admin.login
form_login:
login_path: admin.login
check_path: admin.login
default_target_path: admin.index
main:
pattern: ^/
provider: user_provider
anonymous: true
logout:
path: logout
target: login
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
form_login:
login_path: login
check_path: login
access_control:
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, roles: ROLE_ADMIN }
- { path: ^/mon-compte, roles: ROLE_USER }
encoders:
App\Entity\User:
algorithm: auto
cost: 12
App\Entity\Admin:
algorithm: auto
cost: 12
У меня, конечно, есть форма, контроллеры и представления.
Теперь, что происходит:
- При переходе в / admin меня перенаправляют в / admin / форму
- Я успешно прошел проверку подлинности и вернулся на /admin/login.
- Там служба безопасности решает игнорировать мою аутентификацию и создает новый анонимный сеанс
- Это та же проблема с / login после аутентификации, я возвращаюсь к / в анонимном
Я проверил свой запрос в профилировщике, когда в моей форме POST я вижу сеанс "_security_main" с моим сеансом пользователя.
C:74:"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":294:{a:3:{i:0;N;i:1;s:4:"main";i:2;a:5:{i:0;C:15:"App\Entity\User":29:{a:2:{i:0;i:8;i:1;s:4:"test";}}i:1;b:1;i:2;a:1:{i:0;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"\x00Symfony\Component\Security\Core\Role\Role\x00role";s:13:"ROLE_CUSTOMER";}}i:3;a:0:{}i:4;a:1:{i:0;s:13:"ROLE_CUSTOMER";}}}}"
Но в моем старом проекте Symfony 3.4 я успешно прошел аутентификацию и получил сеанс администратора ..
Я не понял, почему в моей новой версии это не работает ..
Может быть, время жизни сессии? право записи сессии?
Единственное решение, которое работает, это поставить галочку в поле «Запомнить меня»
Спасибо, помогите мне