Installation:
composer require overtrue/socialite
Ensure PHP ≥ 8.0.2.
Basic Configuration:
Define provider configs in an array (e.g., config/social.php):
return [
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect_uri' => env('GITHUB_REDIRECT_URI'),
],
];
First Use Case: Redirect users to GitHub for OAuth:
use Overtrue\Socialite\SocialiteManager;
$config = require __DIR__.'/config/social.php';
$socialite = new SocialiteManager($config);
$url = $socialite->create('github')->redirect();
return redirect($url);
Callback Handling: Process the OAuth code in a callback route:
$code = request()->query('code');
$user = $socialite->create('github')->userFromCode($code);
// Access user data: $user->getEmail(), $user->getName(), etc.
Provider Initialization:
$socialite = new SocialiteManager($config);
$github = $socialite->create('github'); // or custom alias
Redirect Flow:
$authUrl = $github->redirect(); // Returns URL for OAuth redirect
User Data Fetching:
$user = $github->userFromCode($code); // After callback
$user->getId(); // Unique provider ID
$user->getEmail(); // Email (if available)
$user->getAvatar(); // Profile image URL
Token Management:
$token = $github->getAccessToken(); // After userFromCode()
$user = $github->userFromToken($token); // Re-fetch user
Laravel Integration:
Use overtrue/laravel-socialite for seamless Laravel integration (e.g., middleware, service providers).
Example:
use Overtrue\LaravelSocialite\Facades\Socialite;
$user = Socialite::driver('github')->user();
Custom Scopes:
$url = $github->scopes(['user:email'])->redirect();
State Parameter:
$url = $github->state('custom_state')->redirect();
// Verify in callback: $github->getState() === 'custom_state'
Session Storage: Store tokens/user data in the session for later use:
session(['github_token' => $token]);
Multi-Provider Support:
$providers = ['github', 'google'];
foreach ($providers as $provider) {
$socialite->create($provider)->redirect();
}
Redirect URI Mismatch:
redirect_uri in config matches the callback URL registered in the provider’s developer console.https://example.com/callback).State Validation:
state parameter in callbacks to prevent CSRF:
if ($github->getState() !== session('oauth_state')) {
throw new \Exception('State mismatch!');
}
Token Expiry:
Overtrue\Socialite\Exceptions\TokenExpiredException by refreshing tokens or re-authenticating.Provider-Specific Quirks:
scope parameter (e.g., all).openid for token-based user fetching:
$user = $douyin->withOpenId($openid)->userFromToken($token);
CORS Issues:
Enable Debug Mode:
$socialite->setDebug(true); // Logs OAuth requests/responses
Inspect Raw Responses:
$response = $github->getAccessTokenResponse($code);
// Dump $response for debugging
Handle Provider Errors: Catch exceptions for specific providers:
try {
$user = $github->userFromCode($code);
} catch (\Overtrue\Socialite\Exceptions\InvalidStateException $e) {
// Handle invalid state
}
Custom User Model: Map provider data to your user model:
$userData = $github->user()->toArray();
$yourUser = YourUser::updateOrCreate(
['provider_id' => $userData['id']],
[
'name' => $userData['name'],
'email' => $userData['email'] ?? null,
]
);
Extend Providers:
Add support for unsupported providers by implementing ProviderInterface:
class CustomProvider implements \Overtrue\Socialite\Contracts\ProviderInterface {
public function getAuthUrl($state) { /* ... */ }
public function getAccessToken($code) { /* ... */ }
public function getUserByToken($token) { /* ... */ }
}
Register it:
$socialite->extend('custom', function ($config) {
return new CustomProvider($config);
});
Override Default Scopes:
$github->scopes(['user', 'repo']); // Override default scopes
Custom Redirect Logic:
$github->setRedirectUrlGenerator(function ($url) {
return str_replace('https://', 'http://', $url); // Force HTTP
});
redirect or redirect_url for backward compatibility..env or PHP’s getenv() for sensitive data (e.g., client_secret).'twitter' => ['provider' => 'twitter', ...]).How can I help you explore Laravel packages today?