redirect(); } public function handleProviderCallback($provider) { try { $socialUser = Socialite::driver($provider)->user(); } catch (\Exception $e) { return redirect('/login')->with('error', 'Authentication failed.'); } if (Auth::check()) { $user = Auth::user(); $user->update([ 'provider_name' => $provider, 'provider_id' => $socialUser->getId(), ]); return redirect()->intended('/admin')->with('status', 'Account linked successfully!'); } // Find user by provider_id $user = User::where('provider_name', $provider) ->where('provider_id', $socialUser->getId()) ->first(); if (!$user) { // Find user by email to link $user = User::where('email', $socialUser->getEmail())->first(); if ($user) { // Link the account $user->update([ 'provider_name' => $provider, 'provider_id' => $socialUser->getId(), ]); } else { // Optionally create a new user $user = User::create([ 'name' => $socialUser->getName() ?? $socialUser->getNickname() ?? $socialUser->getEmail(), 'email' => $socialUser->getEmail(), 'provider_name' => $provider, 'provider_id' => $socialUser->getId(), 'password' => bcrypt(Str::random(24)), ]); } } Auth::login($user); return redirect()->intended('/admin'); // Redirect to filament admin or home } }