1
0
mirror of synced 2024-11-21 20:36:08 +03:00
service-bundle/Resources/doc/Security.md
2021-03-31 11:00:48 +03:00

1.9 KiB

Authentication

Example security configuration:

security:
    providers:
        client:
            entity:
                class: 'App\Entity\Connection' # must implements UserInterface
                property: 'clientId'
    firewalls:
        api:
            pattern: ^/api
            provider: client
            anonymous: ~
            lazy: true
            stateless: false
            guard:
                authenticators:
                    - RetailCrm\ServiceBundle\Security\FrontApiClientAuthenticator
        callback:
            pattern: ^/callback
            provider: client
            anonymous: ~
            lazy: true
            stateless: true
            guard:
                authenticators:
                    - RetailCrm\ServiceBundle\Security\CallbackClientAuthenticator
        main:
            anonymous: true
            lazy: true

    access_control:
         - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } # login for programmatically authentication user
         - { path: ^/api, roles: ROLE_USER }
         - { path: ^/callback, roles: ROLE_USER }

To authenticate the user after creating it, you can use the following code


use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use RetailCrm\ServiceBundle\Security\FrontApiClientAuthenticator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class AppController extends AbstractController
{
    public function someAction(
        Request $request,
        GuardAuthenticatorHandler $guardAuthenticatorHandler,
        FrontApiClientAuthenticator $frontApiClientAuthenticator,
        ConnectionManager $manager
    ): Response {
        $user = $manager->getUser(); // getting user

        $guardAuthenticatorHandler->authenticateUserAndHandleSuccess(
            $user,
            $request,
            $frontApiClientAuthenticator,
            'api'
        );
        // ...
    }
}