How to use Laravel Socialite for Google login?
Install Laravel Socialite via Composer. 2. Create OAuth credentials in Google Cloud Console and set redirect URI. 3. Add GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REDIRECT_URI to .env and configure in config/services.php. 4. Define routes for Google login and callback. 5. Create GoogleAuthController with redirectToGoogle and handleGoogleCallback methods to authenticate and log in user. 6. Add google_id, google_token, and google_refresh_token fields to users table via migration and include in User model's $fillable array. 7. Add a login button in Blade template linking to the Google login route, and optionally specify scopes for additional data access, ensuring email validation for security, completing the full Google login integration in Laravel using Socialite.

Using Laravel Socialite to implement Google login is straightforward. Here's a step-by-step guide to help you set it up properly in your Laravel application.

1. Install Laravel Socialite
First, install Laravel Socialite via Composer:
composer require laravel/socialite
Note: Laravel Socialite is a first-party package, so it’s well-maintained and integrates smoothly.
2. Configure Google OAuth Credentials
Go to the Google Cloud Console:
- Create a new project or select an existing one.
- Navigate to APIs & Services > Credentials.
- Click Create Credentials > OAuth client ID.
- Choose Web application.
- Add authorized redirect URIs. For local development, use:
http://your-app.test/login/google/callback
or if using Laravel Sail or Valet:

http://localhost:8000/login/google/callback
- Save and copy the Client ID and Client Secret.
3. Add Google Credentials to .env
In your .env file, add the following:
GOOGLE_CLIENT_ID=your-google-client-id GOOGLE_CLIENT_SECRET=your-google-client-secret GOOGLE_REDIRECT_URI=http://localhost:8000/login/google/callback
Then, register these in config/services.php:
// config/services.php
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT_URI'),
],4. Set Up Routes
Add routes for redirecting to Google and handling the callback:
// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\GoogleAuthController;
Route::get('/login/google', [GoogleAuthController::class, 'redirectToGoogle'])
->name('login.google');
Route::get('/login/google/callback', [GoogleAuthController::class, 'handleGoogleCallback']);5. Create the Controller
Generate the controller:
php artisan make:controller Auth/GoogleAuthController
Implement the methods:
// App/Http/Controllers/Auth/GoogleAuthController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
class GoogleAuthController extends Controller
{
public function redirectToGoogle()
{
return Socialite::driver('google')->redirect();
}
public function handleGoogleCallback()
{
try {
$googleUser = Socialite::driver('google')->user();
} catch (\Exception $e) {
return redirect('/login')->withErrors('Google login failed.');
}
// Find or create user
$user = User::updateOrCreate([
'google_id' => $googleUser->id,
], [
'name' => $googleUser->name,
'email' => $googleUser->email,
'google_token' => $googleUser->token,
'google_refresh_token' => $googleUser->refreshToken,
]);
Auth::login($user);
return redirect('/dashboard');
}
}? Tip: Store
google_idin your users table to uniquely identify Google users. You may also want to addgoogle_tokenif you plan to use Google APIs later.
6. Update Your User Model and Migration
Make sure your users table has the necessary fields:
php artisan make:migration add_google_fields_to_users_table --table=users
// migration file
public function up()
{
Schema::table('users', function ($table) {
$table->string('google_id')->nullable()->unique();
$table->string('google_token')->nullable();
$table->string('google_refresh_token')->nullable();
});
}Run the migration:
php artisan migrate
Also, add the fields to your User model's $fillable array:
// app/Models/User.php
protected $fillable = [
'name',
'email',
'google_id',
'google_token',
'google_refresh_token',
];7. Add Google Login Button in Your View
Example in a Blade file:
<!-- resources/views/auth/login.blade.php -->
<a href="{{ route('login.google') }}" class="btn btn-danger">
Login with Google
</a>Optional: Scopes and Additional Data
If you need more permissions (e.g., user's profile, email), you can add scopes:
return Socialite::driver('google')
->scopes(['openid', 'profile', 'email'])
->redirect();By default, Socialite requests basic profile and email, so this is often not needed.
That’s it! You now have Google login working in your Laravel app using Socialite.
⚠️ Security Note: Always validate the email and consider email verification if you're allowing account creation based on Google login.
Basically just follow the flow: redirect → callback → get user → log in or register → redirect to dashboard.
The above is the detailed content of How to use Laravel Socialite for Google login?. For more information, please follow other related articles on the PHP Chinese website!
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
How to use subqueries in Eloquent in Laravel?
Aug 05, 2025 am 07:53 AM
LaravelEloquentsupportssubqueriesinSELECT,FROM,WHERE,andORDERBYclauses,enablingflexibledataretrievalwithoutrawSQL;1.UseselectSub()toaddcomputedcolumnslikepostcountperuser;2.UsefromSub()orclosureinfrom()totreatsubqueryasderivedtableforgroupeddata;3.Us
How to handle recurring payments with Laravel Cashier?
Aug 06, 2025 pm 01:38 PM
InstallLaravelCashierviaComposerandconfiguremigrationandBillabletrait.2.CreatesubscriptionplansinStripeDashboardandnoteplanIDs.3.CollectpaymentmethodusingStripeCheckoutandstoreitviasetupintent.4.SubscribeusertoaplanusingnewSubscription()anddefaultpay
How to use sub-domain routing in Laravel?
Aug 08, 2025 pm 05:07 PM
SetupdomainorlocalenvironmentforsubdomainsupportusingLaravelValet,Homestead,orhostsfileentrieslike127.0.0.1admin.yourapp.test;2.Definewildcardsubdomainroutesinroutes/web.phpusingRoute::domain('{account}.yourapp.com')tocapturesubdomainparameters;3.Cre
How to schedule Artisan commands in Laravel
Aug 14, 2025 pm 12:00 PM
Define the schedule: Use Schedule object to configure Artisan command scheduling in the schedule method of the App\Console\Kernel class; 2. Set the frequency: Set the execution frequency through chain methods such as everyMinute, daily, hourly or cron syntax; 3. Pass parameters: Use arrays or strings to pass parameters to the command; 4. Scheduling the shell command: Use exec method to run system commands; 5. Add conditions: Use when, weekdays and other methods to control the execution timing; 6. Output processing: Use sendOutputTo, appendOutputTo or emailOutputTo to record or
How to use fluent string operations in Laravel?
Aug 14, 2025 pm 04:20 PM
Laravel has introduced smooth string operations based on Illuminate\Support\Stringable since version 7. The answer is to use Str::of() to start chain calls. 1. Create a Stringable instance through Str::of('string') and call the method chained. 2. Common methods include trim, replace, append, slug, upper, etc. for formatting. 3. Use when($condition, $callback) to implement conditional conversion. 4. Use after, before, substr and other methods to extract string fragments. 5. It can be used to clear the actual application.
How to create a real-time chat application with Laravel and WebSockets?
Aug 16, 2025 am 04:23 AM
Create a Laravel project and install Sanctum and Pusher packages; 2. Configure Pusher credentials and set up broadcast drivers; 3. Create a message model and migration; 4. Create a MessageSent event that implements ShouldBroadcast; 5. Set up Sanctum authentication and API routing and implement a message controller; 6. Install and configure LaravelEcho and PusherJS in the front-end; 7. Use Echo to join the chat channel and listen to messages; 8. Define broadcast authorization logic in channels.php; 9. Start the service and test real-time message delivery. You can choose to build a LaravelWebSockets service, and the entire process is through Lar
How to build a real-time chat application with Laravel?
Aug 04, 2025 pm 01:03 PM
SetupLaravelandinstalldependenciesincludingLaravelSanctumandLaravelEcho.2.ConfigurePusherasthebroadcastdriverin.envandenabletheBroadcastServiceProvider.3.CreateaMessagemodelwithamigrationthatincludesuser_idandmessagefields.4.Implementauthenticationus
What is the Laravel application request lifecycle?
Aug 05, 2025 pm 05:48 PM
Laravel's request life cycle goes through 7 stages from user-initiating a request to response return: 1. The request starts with public/index.php, loads the automatic loader and creates an application instance; 2. The HTTP kernel loads configuration, environment and service providers through boot classes; 3. The request handles security, session and other tasks through global middleware; 4. The router matches the request URI and method, executes the corresponding closure or controller, and applies routing middleware; 5. The controller instantiates through dependency injection, executes logic and returns views, JSON, redirects and other responses; 6. The response is encapsulated as a SymfonyResponse object and outputs through $response->send(); 7. Response sends




