Espera un momento ...
¿Te gustaría llevar mi curso de Laravel, gratis?
Sólo debes ingresar tus datos:
Socialite es un paquete de Laravel que nos permite iniciar sesión mediante aplicaciones de terceros.
Es decir, nuestros usuarios podrán iniciar sesión en nuestra aplicación usando sus cuentas de redes sociales.
Para lograr esto, Socialite nos permite usar distintos proveedores en nuestra implementación.
Existe una variada lista de Socialite Providers, y los siguientes son algunos de ellos:
Estos proveedores exponen un método de autenticación basado en OAuth.
Y el paquete nos facilita el uso de este protocolo.
Hoy, a modo de ejemplo, vamos a implementar un inicio de sesión usando Facebook y Twitter.
Para esto vamos a seguir 5 pasos, que son descritos a continuación.
Lo primero que debemos hacer es registrar nuestra aplicación ante Facebook y Twitter.
Solicitar credenciales en la página de desarrolladores de Facebook: https://developers.facebook.com/
En el caso de Facebook, debemos hacer clic en "Agregar nueva aplicación" e ingresar un nombre para nuestra aplicación.
Una vez hecho ello, estaremos en un dashboard que nos permitirá gestionar nuestra app facebook. Debemos elegir la opción "Panel" en el menú. Allí encontraremos nuestras credenciales.
En Twitter es muy similar. Hacemos clic en "Crear nueva app".
E ingresamos los datos de nuestra app Twitter.
Luego de crear nuestra app en Twitter, la pestaña "Keys and Access Tokens" nos permitirá acceder a nuestras credenciales.
Con esto ya estamos listos para ir al siguiente paso.
Aunque, debes tener en cuenta que:
Desde el panel de Facebook y Twitter también es posible subir el logo de nuestra aplicación, para que cuando nuestros usuarios vayan a iniciar sesión vean nuestro logo, y esto les inspire confianza.
Las credenciales que hemos obtenido las debemos añadir a nuestro archivo de configuración config/services.php
, tal como se muestra a continuación.
return [
// ...
'facebook' => [
'client_id' => env('FACEBOOK_KEY'),
'client_secret' => env('FACEBOOK_SECRET'),
'redirect' => Config('app.url') . '/login/facebook/callback'
],
'twitter' => [
'client_id' => env('TWITTER_KEY'),
'client_secret' => env('TWITTER_SECRET'),
'redirect' => Config('app.url') . '/login/twitter/callback'
]
];
Como se observa, las variables que están en este archivo config/services.php
se obtienen a partir de nuestro archivo .env
, por tratarse de datos sensibles.
Por lo tanto, en nuestro .env
tendríamos algo como lo siguiente:
FACEBOOK_KEY=314269922316594
FACEBOOK_SECRET=e23d9bbd406571f2cf9b0ae0f86a6d89
TWITTER_KEY=bkLqGFN2f1CB2qOj57z4OnWtb
TWITTER_SECRET=mAhiTKtSsYxFpVNgDdDS82qxcBrAIiwgluv8B2wqK03UiLCAgS
Ahora que tenemos nuestras aplicaciones registradas en Facebook y Twitter, y hemos añadido las credenciales a nuestro proyecto, es hora de instalar el paquete Laravel Socialite, que es el que nos facilitará hacer uso del protocolo OAuth para el inicio de sesión.
Para instalar esta dependencia en nuestro proyecto, ejecutamos:
composer require laravel/socialite
Luego vamos a config/app.php
y en el arreglo de providers
añadimos:
Laravel\Socialite\SocialiteServiceProvider::class
Así mismo en el arreglo de aliases
:
'Socialite' => Laravel\Socialite\Facades\Socialite::class
Una vez que hemos obtenido nuestras credenciales, lo siguiente es empezar a definir las rutas de autenticación en nuestro proyecto.
Puedes usar la ruta que mejor te parezca para implementar el inicio de sesión.
A modo de ejemplo, yo usaré las 2 siguientes rutas, para gestionar el inicio de sesión vía Facebook:
Route::get('login/facebook', 'Auth\LoginFacebookController@redirect');
Route::get('login/facebook/callback', 'Auth\LoginFacebookController@callback');
Estas 2 rutas permiten correspondientemente:
Entonces, vamos a crear a tan dichoso controlador:
php artisan make:controller Auth/LoginFacebookController
En su interior debemos definir el método redirect
de tal forma que el usuario sea redirigido a una página de Facebook.
¿Para qué o por qué?
Todo esto se resume a una línea de código gracias a Socialite:
public function redirect()
{
return Socialite::driver('facebook')->redirect();
}
Una vez que el usuario ha aceptado iniciar sesión vía Facebook, ¿qué procede?
Nuestra aplicación ya puede obtener los datos del usuario.
¿Cómo se hace ello en el caso de Facebook, en el de Twitter o alguno de los otros proveedores?
Felizmente Socialite pone a nuestra disposición una interfaz en común para facilitar esta tarea.
Es decir, tenemos métodos que funcionan de igual forma para todos los proveedores.
$user = Socialite::driver('facebook')->user();
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
Vamos a empezar haciendo algo muy sencillo:
public function callback()
{
$user = Socialite::driver('facebook')->user();
dd($user);
}
Y empecemos a probar nuestro inicio de sesión, ingresando a la ruta que hemos definido antes.
/login/facebook
directamente desde el navegador, href
a dicha página.Ahora mismo he ingresado y obtuve el siguiente mensaje.
Esto se debe a que debemos registrar en Facebook el dominio desde el cuál vamos a implementar el inicio de sesión.
En este caso, estoy usando un Virtual Host localmente y accedo al proyecto desde tawa.dev.pe
.
Por lo tanto, debo ir a la configuración básica de mi app facebook,
hacer clic en "Agregar plataforma" (este botón se encuentra al final) y escoger la opción "Sitio web".
De tal forma que en la configuración,
se tenga el mismo valor (correspondiente a la variable APP_URL
que tenemos definida en el archivo .env
).
Por último, simplemente debemos registrar nuestra URL de callback como una URI de redireccionamiento válida:
Y así es como al visitar nuevamente /login/facebook
veremos lo siguiente:
El nombre y el logo de la aplicación se pueden cambiar desde la sección "Configuración básica". Por ejemplo, este es otro proyecto:
Luego de dar permisos, la información del usuario se muestra del siguiente modo:
¿Qué sucede si uso un puerto distinto al 80?
En ese caso, la URI de redireccionamiento se debe registrar considerando el puerto.
Y la variable APP_URL
debe también incluir el puerto.
APP_URL=http://tawa.dev.pe:8080
¿Cómo hago para tener activo el inicio de sesión con Facebook tanto en producción como en local?
En esta guía hemos visto cómo registrar una app en Facebook, y hemos configurado esta app directamente, para no hacer muy extensa la guía.
Pero lo más adecuado es tener una app Facebook, más su correspondiente versión de prueba (es decir 2 aplicaciones cliente en Facebook). Así podemos tener 2 configuraciones distintas, según el entorno en que nos encontremos.
Para lograr ello simplemente debes hacer clic en el siguiente botón:
Comparte este post si te fue de ayuda 🙂.
Regístrate
Accede a todos los cursos, y resuelve todas tus dudas.
Cursos Recomendados
Veamos cómo implementar un login mediante redes sociales! Aprende y aplica esto sobre cualquier proyecto Laravel.
Iniciar cursoCurso intensivo. Incluye el desarrollo de una API, su consumo, y autenticación vía JWT. También vemos Kotlin desde 0.
Iniciar cursoNuevo curso! Aprende Vite, Pinia, Vuetify, Vue Router y TypeScript. Desarrolla un eCommerce desde cero.
Iniciar cursoEspera un momento ...
¿Te gustaría llevar mi curso de Laravel, gratis?
Sólo debes ingresar tus datos: