diff --git a/code_samples/user_management/in_memory/config/packages/security.yaml b/code_samples/user_management/in_memory/config/packages/security.yaml new file mode 100644 index 0000000000..399be2b162 --- /dev/null +++ b/code_samples/user_management/in_memory/config/packages/security.yaml @@ -0,0 +1,17 @@ +# config/packages/security.yaml +security: + providers: + # Chaining in_memory and ibexa user providers + chain_provider: + chain: + providers: [in_memory, ibexa] + ibexa: + id: ibexa.security.user_provider + in_memory: + memory: + users: + # You will then be able to login with username "user" and password "userpass" + user: { password: userpass, roles: [ 'ROLE_USER' ] } + # The "in memory" provider requires an encoder for Symfony\Component\Security\Core\User\User + password_hashers: + Symfony\Component\Security\Core\User\User: plaintext diff --git a/code_samples/user_management/in_memory/config/services.yaml b/code_samples/user_management/in_memory/config/services.yaml new file mode 100644 index 0000000000..bcc55729a0 --- /dev/null +++ b/code_samples/user_management/in_memory/config/services.yaml @@ -0,0 +1,5 @@ +services: + App\EventListener\InteractiveLoginSubscriber: + arguments: ['@ibexa.api.service.user'] + tags: + - { name: kernel.event_subscriber } diff --git a/code_samples/user_management/in_memory/src/EventSubscriber/InteractiveLoginSubscriber.php b/code_samples/user_management/in_memory/src/EventSubscriber/InteractiveLoginSubscriber.php new file mode 100644 index 0000000000..37d0cc70ca --- /dev/null +++ b/code_samples/user_management/in_memory/src/EventSubscriber/InteractiveLoginSubscriber.php @@ -0,0 +1,35 @@ +userService = $userService; + } + + public static function getSubscribedEvents() + { + return [ + MVCEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin', + ]; + } + + public function onInteractiveLogin(InteractiveLoginEvent $event) + { + // This loads a generic User and assigns it back to the event. + // You may want to create Users here, or even load predefined Users depending on your own rules. + $event->setApiUser($this->userService->loadUserByLogin('lolautruche')); + } +} diff --git a/docs/users/user_authentication.md b/docs/users/user_authentication.md index d2b7280301..867730b996 100644 --- a/docs/users/user_authentication.md +++ b/docs/users/user_authentication.md @@ -38,23 +38,7 @@ You can override `getUser()` to return whatever user class you want, as long a The following is an example of using the in-memory user provider: ``` yaml -# config/packages/security.yaml -security: - providers: - # Chaining in_memory and ibexa user providers - chain_provider: - chain: - providers: [in_memory, ibexa] - ibexa: - id: ibexa.security.user_provider - in_memory: - memory: - users: - # You will then be able to login with username "user" and password "userpass" - user: { password: userpass, roles: [ 'ROLE_USER' ] } - # The "in memory" provider requires an encoder for Symfony\Component\Security\Core\User\User - encoders: - Symfony\Component\Security\Core\User\User: plaintext +[[= include_file('code_samples/user_management/in_memory/config/packages/security.yaml') =]] ``` ### Implement the listener @@ -62,49 +46,11 @@ security: In the `config/services.yaml` file: ``` yaml -services: - App\EventListener\InteractiveLoginListener: - arguments: ['@ibexa.api.service.user'] - tags: - - { name: kernel.event_subscriber }  +[[= include_file('code_samples/user_management/in_memory/config/services.yaml') =]] ``` Don't mix `MVCEvents::INTERACTIVE_LOGIN` event (specific to [[= product_name =]]) and `SecurityEvents::INTERACTIVE_LOGIN` event (fired by Symfony security component). ``` php -userService = $userService; - } - - public static function getSubscribedEvents() - { - return [ - MVCEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin' - ]; - } - - public function onInteractiveLogin(InteractiveLoginEvent $event) - { - // This loads a generic User and assigns it back to the event. - // You may want to create Users here, or even load predefined Users depending on your own rules. - $event->setApiUser($this->userService->loadUserByLogin( 'lolautruche' )); - } -}  +[[= include_file('code_samples/user_management/in_memory/src/EventSubscriber/InteractiveLoginSubscriber.php') =]] ```