Laravel also provides a simple, convenient way to authenticate with OAuth providers using Laravel Socialite. Socialite currently supports authentication via Facebook, X, LinkedIn, Google, GitHub, GitLab, Bitbucket, and Slack.
1.Install Laravel Socialite
composer require laravel/socialite
Socialite is Laravel’s official OAuth authentication package.
2. Update Users Table for Social Login
Create Migration
php artisan make:migration add_social_login_fields_to_users_table
Migration Code
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
Schema::table('users', function (Blueprint $table) {
$table->string('provider')->nullable(); // google, facebook, github
$table->string('provider_id')->nullable(); // social user ID
$table->string('avatar')->nullable(); // profile image (optional)
});
Run:
php artisan migrate
3.Set Environment Variables
.env
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:8000/auth/google/callback
FACEBOOK_CLIENT_ID=your_facebook_client_id
FACEBOOK_CLIENT_SECRET=your_facebook_client_secret
FACEBOOK_REDIRECT_URI=http://localhost:8000/auth/facebook/callback
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
GITHUB_REDIRECT_URI=http://localhost:8000/auth/github/callback
4.Configure config/services.php
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT_URI'),
],
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_REDIRECT_URI'),
],
'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => env('GITHUB_REDIRECT_URI'), ]
5.Define Routes
routes/web.php
use App\Http\Controllers\Auth\SocialAuthController;
Route::get('/auth/{provider}', [SocialAuthController::class, 'redirect']);
Route::get('/auth/{provider}/callback', [SocialAuthController::class, 'callback']);
6.Create SocialAuthController
php artisan make:controller Auth/SocialAuthController
7.SocialAuthController Code
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Laravel\Socialite\Facades\Socialite;
class SocialAuthController extends Controller
{
protected $providers = ['google', 'facebook', 'github'];
public function redirect($provider)
{
if (!in_array($provider, $this->providers)) {
abort(404);
}
return Socialite::driver($provider)->redirect();
}
public function callback($provider)
{
if (!in_array($provider, $this->providers)) {
abort(404);
}
$socialUser = Socialite::driver($provider)->user();
// Find user by provider ID
$user = User::where('provider', $provider)
->where('provider_id', $socialUser->getId())
->first();
// If user does not exist, create new
if (!$user) {
$user = User::create([
'name' => $socialUser->getName() ?? $socialUser->getNickname() ?? 'Social User',
'email' => $socialUser->getEmail(),
'password' => bcrypt(Str::random(24)),
'provider' => $provider,
'provider_id' => $socialUser->getId(),
'avatar' => $socialUser->getAvatar(),
]);
}
Auth::login($user);
return redirect()->route('dashboard');
}
}
8.Add Social Login Buttons (Blade)
<a href="{{ url('/auth/google') }}" class="btn btn-danger">
Login with Google
</a>
<a href="{{ url('/auth/facebook') }}" class="btn btn-primary">
Login with Facebook
</a>
<a href="{{ url('/auth/github') }}" class="btn btn-dark"> Login with GitHub </a>
9.OAuth Setup Instructions
- Google Cloud Console
- Create project
- OAuth Consent Screen
- Create OAuth Client ID
- Redirect URI:
http://localhost:8000/auth/google/callback
 Facebook
- Facebook Developers
- Create App → Facebook Login
- Redirect URI:
http://localhost:8000/auth/facebook/callback
 GitHub
- GitHub → Settings → Developer Settings
- OAuth Apps → New App
- Authorization callback URL:
http://localhost:8000/auth/github/callback
Other Social Login Providers in Laravel
Built-in Socialite Providers
Laravel Socialite officially supports:
- Twitter (X)
- Bitbucket
- GitLab
i.Twitter (X) Login
Step 1: Twitter Developer Setup
- Go to Twitter Developer Portal
- Create App
- Enable OAuth 2.0
- Set Callback URL:
http://localhost:8000/auth/twitter/callback
Step 2: .env
TWITTER_CLIENT_ID=your_twitter_client_id
TWITTER_CLIENT_SECRET=your_twitter_client_secret
TWITTER_REDIRECT_URI=http://localhost:8000/auth/twitter/callback
Step 3: config/services.php
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('TWITTER_REDIRECT_URI'),
],
Step 4: Button
<a href="{{ url('/auth/twitter') }}" class="btn btn-info">
Login with Twitter
</a>
 Twitter may not return email by default.
ii.LinkedIn Login
Step 1: LinkedIn Developer Setup
- Go to LinkedIn Developers
- Create App
- OAuth 2.0 → Redirect URL:
http://localhost:8000/auth/linkedin/callback
Step 2: .env
LINKEDIN_CLIENT_ID=your_linkedin_client_id
LINKEDIN_CLIENT_SECRET=your_linkedin_client_secret
LINKEDIN_REDIRECT_URI=http://localhost:8000/auth/linkedin/callback
Step 3: config/services.php
'linkedin' => [
'client_id' => env('LINKEDIN_CLIENT_ID'),
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
'redirect' => env('LINKEDIN_REDIRECT_URI'),
],
Step 4: Button
<a href="{{ url('/auth/linkedin') }}" class="btn btn-primary">
Login with LinkedIn
</a>
iii.GitLab Login
GitLab OAuth Setup
- User Settings → Applications
- Redirect URI:
http://localhost:8000/auth/gitlab/callback
.env
GITLAB_CLIENT_ID=your_gitlab_client_id
GITLAB_CLIENT_SECRET=your_gitlab_client_secret
GITLAB_REDIRECT_URI=http://localhost:8000/auth/gitlab/callback
config/services.php
'gitlab' => [
'client_id' => env('GITLAB_CLIENT_ID'),
'client_secret' => env('GITLAB_CLIENT_SECRET'),
'redirect' => env('GITLAB_REDIRECT_URI'),
],
iv.Bitbucket Login
.env
BITBUCKET_CLIENT_ID=your_bitbucket_client_id
BITBUCKET_CLIENT_SECRET=your_bitbucket_client_secret
BITBUCKET_REDIRECT_URI=http://localhost:8000/auth/bitbucket/callback
config/services.php
'bitbucket' => [
'client_id' => env('BITBUCKET_CLIENT_ID'),
'client_secret' => env('BITBUCKET_CLIENT_SECRET'),
'redirect' => env('BITBUCKET_REDIRECT_URI'),
],
v. Providers NOT Included by Default
(Using Socialite Providers)
Install base manager:
composer require socialiteproviders/manager
Example Providers:
- Apple
- Microsoft (Azure)
- Discord
- Slack
- Amazon
- Yahoo
- Twitch
vi. Example: Microsoft (Azure) Login
composer require socialiteproviders/microsoft
Event Listener
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
'SocialiteProviders\\Microsoft\\MicrosoftExtendSocialite@handle',
],
];
config/services.php
'microsoft' => [
'client_id' => env('MICROSOFT_CLIENT_ID'),
'client_secret' => env('MICROSOFT_CLIENT_SECRET'),
'redirect' => env('MICROSOFT_REDIRECT_URI'),
],
vii.Controller Code (Same for ALL Providers)
Socialite::driver($provider)->user();
or for API / React:
Socialite::driver($provider)->stateless()->user();
