- if ($action == 'login') return $this->socialAuthService->handleLoginCallback($socialDriver);
- if ($action == 'register') return $this->socialRegisterCallback($socialDriver);
+
+ // Attempt login or fall-back to register if allowed.
+ $socialUser = $this->socialAuthService->getSocialUser($socialDriver);
+ if ($action == 'login') {
+ try {
+ return $this->socialAuthService->handleLoginCallback($socialDriver, $socialUser);
+ } catch (SocialSignInAccountNotUsed $exception) {
+ if ($this->socialAuthService->driverAutoRegisterEnabled($socialDriver)) {
+ return $this->socialRegisterCallback($socialDriver, $socialUser);
+ }
+ throw $exception;
+ }
+ }
+
+ if ($action == 'register') {
+ return $this->socialRegisterCallback($socialDriver, $socialUser);
+ }
+