canAuthenticateUser = $canAuthenticateUser; $this->authenticatesUser = $authenticatesUser; $this->generatesAuthenticationToken = $generatesAuthenticationToken; $this->fetchesUser = $fetchesUser; $this->authenticationRedirect = $authenticationRedirect; } /** * @param Request $request * @return array * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\AccessUnauthorisedException * @throws \App\Classes\Exceptions\RequestValidationException */ public function execute(Request $request): array { $object = new AuthenticationCredentialsObject($request->input('email'), $request->input('password')); $this->canAuthenticateUser->passes($object); $this->authenticatesUser->execute($object); $user = $this->fetchesUser->execute(['email' => $object->getEmail()]); return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)]; } }