cakephpcakedc

cakedc/users autologin after registration


I'm using the cakephp 4.2.6 with the cakedc/users plugin. I'd like to automatically login the user after registration without the need to first activate the account by clicking on the link in e-mail.

My idea is to creating an Event-Listener and listening to the Users.Global.afterRegister Event, but then I don't know how to login the user with the new Authentication.


Solution

  • There is a similar use case covered in the plugin documentation https://github.com/CakeDC/users/blob/master/Docs/Documentation/Events.md

    Your approach looks correct to me, using the afterRegister event to create the listener in a controller where you have access to the Authenticatication component,

    // note this example is handling auto-login after the user validated the email sent (click the validation token link sent to his email address)
    EventManager::instance()->on(
        \CakeDC\Users\Plugin::EVENT_AFTER_EMAIL_TOKEN_VALIDATION,
        function($event){
            $users = $this->getTableLocator()->get('Users');
            $user = $users->get($event->getData('user')->id);
            $this->Authentication->setIdentity($user);
        }
    );
    

    or using the request to retrieve the authentication service and set the identity like it's done here https://github.com/cakephp/authentication/blob/master/src/Controller/Component/AuthenticationComponent.php#L273