public function handleCallback()
{
$user = Socialite::driver('provider')->user();
$existingUsr = User::where('uid', $user->getId())->first();
if ($existingUsr) {
Auth::login($existingUsr, TRUE);
return redirect()->route('dashboard');
}
if (! $user->getEmail()) {
return redirect()->route('social-register', ['token' => $user->token]);
}
User::create([
'uid' => $user->getId(),
'name' => $user->getName(),
'email' => $user->getEmail(),
'avatar' => $user->getAvatar()
]);
return redirect()->route('dashboard');
}
Use custom registration controller and there with token you can get the user
public function showRegistrationForm(Request $request, $token)
{
$user = Socialite::driver('provider')->userFromToken($token);
// other code similar to classic registration
}
public function register(Request $request, $token)
{
$user = Socialite::driver('provider')->userFromToken($token);
// other code similar to classic registration
}
Main idea is that you can retrieve same user by a token.
And just add logic to similar default laravel registration, where the user have to post an email.
Documentation: https://laravel.com/docs/7.x/socialite#retrieving-user-details