How to Add Google Oauth Social Login With Laravel Socialite Jetstream

  • Install Jetstream (refer official documentation) composer require laravel/jetstream php artisan jetstream:install livewire

  • Install Socialite (you would need to install Jetstream before installing Socialite) composer require laravel/socialite

  • Create OAUth Screen & Credentials in Google Cloud Console

    Take care of the URLs that you enter in the Console and those that you provision in your app.

Add migration to update Users table. Add a field to store Google ID for the user.

php artisan make:migration add_google_id_to_users_table

$table->string('google_id')->nullable();

$table->dropColumn('google_id');

Update model - User

protected $fillable = [
    'google_id',
];

Create a controller to handle post OAuth login

php artisan make:controller SocialController

public function googleSocial() {
    $googleUser = Socialite::driver('google')->user();

    $newUser = User::updateOrCreate(
        [
            'google_id' => $googleUser->id,
        ],
        [
            'name' => $googleUser->name,
            'email' => $googleUser->email,
            'password' => Hash::make($googleUser->token),
        ]
    );
    
    Auth::login($newUser);

    return redirect('/dashboard');
}

Update route with the new SocialController

Route::get('/auth/redirect', function () {
    return Socialite::driver('google')->redirect();
});
    
Route::get('/auth/callback', [SocialController::class, 'googleSocial']);

Run migration

Extras

If you want to disable new-user registration (comment out the following lines in config\fortify.php)

// Features::registration(),
// Features::resetPasswords(),

Stylize Google login button

<div class="w-full">
    <a href="{{ url('auth/redirect') }}" class="block border-2 border-indigo-400 text-center my-4 p-2 rounded-md">
    <svg xmlns="https://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 48 48" aria-hidden="true" class="inline L5wZDc"><path fill="#4285F4" d="M45.12 24.5c0-1.56-.14-3.06-.4-4.5H24v8.51h11.84c-.51 2.75-2.06 5.08-4.39 6.64v5.52h7.11c4.16-3.83 6.56-9.47 6.56-16.17z"></path><path fill="#34A853" d="M24 46c5.94 0 10.92-1.97 14.56-5.33l-7.11-5.52c-1.97 1.32-4.49 2.1-7.45 2.1-5.73 0-10.58-3.87-12.31-9.07H4.34v5.7C7.96 41.07 15.4 46 24 46z"></path><path fill="#FBBC05" d="M11.69 28.18C11.25 26.86 11 25.45 11 24s.25-2.86.69-4.18v-5.7H4.34C2.85 17.09 2 20.45 2 24c0 3.55.85 6.91 2.34 9.88l7.35-5.7z"></path><path fill="#EA4335" d="M24 10.75c3.23 0 6.13 1.11 8.41 3.29l6.31-6.31C34.91 4.18 29.93 2 24 2 15.4 2 7.96 6.93 4.34 14.12l7.35 5.7c1.73-5.2 6.58-9.07 12.31-9.07z"></path><path fill="none" d="M2 2h44v44H2z"></path></svg>
    {{ __('Log in with Google') }}
    </a>
</div>
comments powered by Disqus