Laravel Socialite es el paquete oficial para implementar de forma sencilla el login social con OAuth 2.0. Soporta los principales proveedores (GitHub, Google, Facebook, X (Twitter), LinkedIn…) y reduce a unas pocas líneas la implementación de un flujo OAuth complejo.Proveedores soportados de fábrica:
Se necesitan dos rutas: una para redirigir y otra para el callback.
use Laravel\Socialite\Facades\Socialite;// Redirige al usuario a GitHubRoute::get('/auth/github', function () { return Socialite::driver('github')->redirect();});// Procesa el callback de GitHubRoute::get('/auth/github/callback', function () { $user = Socialite::driver('github')->user(); // $user->token contiene el access token});
// database/migrations/xxxx_xx_xx_add_github_columns_to_users_table.phpreturn new class extends Migration{ public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('github_id')->nullable()->unique()->after('id'); $table->string('github_token')->nullable()->after('github_id'); $table->string('github_refresh_token')->nullable()->after('github_token'); }); } public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn(['github_id', 'github_token', 'github_refresh_token']); }); }};
Con with() añades parámetros a la petición de redirección.
// Restricción de dominio en Googlereturn Socialite::driver('google') ->with(['hd' => 'example.com']) ->redirect();// Fuerza la pantalla de consentimiento en Googlereturn Socialite::driver('google') ->with(['prompt' => 'consent']) ->redirect();
No pases palabras clave reservadas como state o response_type mediante with().
Para generar tokens de bot de Slack, usa asBotUser().
// En la redirecciónreturn Socialite::driver('slack') ->asBotUser() ->setScopes(['chat:write', 'chat:write.public', 'chat:write.customize']) ->redirect();// En el callback$user = Socialite::driver('slack')->asBotUser()->user();
use Laravel\Socialite\Facades\Socialite;test('el usuario se redirige a GitHub', function () { Socialite::fake('github'); $response = $this->get('/auth/github'); $response->assertRedirect();});
Si necesitas un proveedor que no está entre los integrados, la forma oficial es registrar un driver personalizado con Socialite::extend(). SocialiteManager hereda de Illuminate\Support\Manager, así que se extiende con el mismo mecanismo que otros drivers de Laravel.
Extiende Laravel\Socialite\Two\AbstractProvider e implementa los cuatro métodos abstractos.
// app/Socialite/ExampleProvider.phpnamespace App\Socialite;use Laravel\Socialite\Two\AbstractProvider;use Laravel\Socialite\Two\User;class ExampleProvider extends AbstractProvider{ // URL de autorización (adonde se redirige al usuario) public function getAuthUrl($state): string { return $this->buildAuthUrlFromBase('https://example.com/oauth/authorize', $state); } // URL para obtener el access token protected function getTokenUrl(): string { return 'https://example.com/oauth/token'; } // Obtiene la info del usuario a partir del token protected function getUserByToken($token): array { $response = $this->getHttpClient()->get('https://example.com/api/user', [ 'headers' => ['Authorization' => 'Bearer '.$token], ]); return json_decode($response->getBody(), true); } // Convierte el array obtenido en un objeto User de Socialite protected function mapUserToObject(array $user): User { return (new User)->setRaw($user)->map([ 'id' => $user['id'], 'nickname' => $user['login'] ?? null, 'name' => $user['name'], 'email' => $user['email'], 'avatar' => $user['avatar_url'] ?? null, ]); }}
Rol de cada método:
Método
Función
getAuthUrl($state)
Devuelve la URL de autorización OAuth a la que redirigir
getTokenUrl()
Endpoint para intercambiar el código por un access token
getUserByToken($token)
Llama a la API del proveedor con el token y devuelve un array
Extensiones de Socialite publicadas por los mantenedores de este sitio. Todas siguen la forma oficial usando Socialite::extend(), así que basta con añadir la configuración a config/services.php.
LINE
LINE SDK para Laravel. Login OAuth con Socialite y también integración con Messaging API.
Bluesky
Integración con AT Protocol (Bluesky). Soporta autenticación OAuth y publicación de posts.
Discord
Login con Discord OAuth2.
Threads
Integración con Meta Threads. Soporta autenticación OAuth y la API de publicación.
Amazon
Login con Amazon vía OAuth.
Mastodon
Login OAuth con instancias de Mastodon.
WordPress
Login OAuth con WordPress.com y WordPress autoalojado.