{"id":29283,"date":"2021-06-12T12:33:00","date_gmt":"2021-06-12T09:33:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29283"},"modified":"2021-10-17T16:19:44","modified_gmt":"2021-10-17T13:19:44","slug":"iniciar-sesion-con-linkedin-en-laravel-usando-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/iniciar-sesion-con-linkedin-en-laravel-usando-laravel-socialite\/","title":{"rendered":"Iniciar sesi\u00f3n con LinkedIn en Laravel usando Laravel Socialite"},"content":{"rendered":"<p>Agregar un sistema de inicio de sesi\u00f3n social en el sitio web es la tendencia hoy en d\u00eda. Al integrar el inicio de sesi\u00f3n social, se omitir\u00e1 el proceso de verificaci\u00f3n de un usuario. Los sitios sociales ya tienen usuarios verificados, por lo que nuestra aplicaci\u00f3n no necesita seguir el mismo proceso con un usuario. Podemos confiar en los sitios sociales y permitir que el usuario utilice nuestro sistema si inicia sesi\u00f3n a trav\u00e9s de un sitio social en nuestro sitio web. Facebook, Twitter, Google, LinkedIn son los sitios sociales populares que normalmente se integran como un inicio de sesi\u00f3n social en el sitio web. En este art\u00edculo, cubriremos un inicio de sesi\u00f3n con LinkedIn en Laravel.<\/p>\n<p>Para nuestro tutorial, integrar\u00e9 el inicio de sesi\u00f3n de LinkedIn en la nueva instalaci\u00f3n de Laravel. Voy a instalar Laravel, crear\u00e9 una tabla de &#8216;usuarios&#8217; e instalar\u00e9 los paquetes necesarios para integrar el sistema de inicio de sesi\u00f3n social.<\/p>\n<p>Ejecute el siguiente comando para instalar Laravel. Aqu\u00ed estoy creando un proyecto como &#8216;linkedinlogin&#8217;.<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel linkedinlogin<\/code><\/pre>\n<p>Despu\u00e9s de la instalaci\u00f3n, cree la base de datos y configure las credenciales en el <code>.env<\/code>archivo. Estamos construyendo un sistema de inicio de sesi\u00f3n, por lo que deber\u00edamos almacenar los detalles del usuario en la base de datos.<\/p>\n<p>Este tutorial se basa en el inicio de sesi\u00f3n de LinkedIn, por lo que obtendremos el ID de perfil de LinkedIn del usuario despu\u00e9s de una autenticaci\u00f3n exitosa. Para almacenar esta identificaci\u00f3n social, estamos agregando las columnas proveedor y provider_id. Aqu\u00ed, la columna del proveedor almacenar\u00e1 el valor &#8216;linkedin&#8217; y el provider_id almacenar\u00e1 la identificaci\u00f3n social del usuario.<\/p>\n<p>Cuando usamos el inicio de sesi\u00f3n social, no necesitamos almacenar contrase\u00f1as, por lo que el valor de la columna de contrase\u00f1a debe aceptar &#8216;NULL&#8217; como predeterminado. No hay garant\u00eda de recibir el correo electr\u00f3nico del usuario despu\u00e9s del inicio de sesi\u00f3n social, por lo que, por curiosidad, debemos configurar la columna de correo electr\u00f3nico tambi\u00e9n para aceptar &#8216;NULL&#8217;.<\/p>\n<p>Abra el archivo de migraci\u00f3n de la tabla de usuarios y agregue el c\u00f3digo a continuaci\u00f3n.<\/p>\n<pre><code>\/**\n\u00a0* Run the migrations.\n\u00a0*\n\u00a0* @return void\n\u00a0*\/\npublic function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('users', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;increments('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('email')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamp('email_verified_at')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('password')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;rememberToken();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Ejecute el siguiente comando que crear\u00e1 las tablas en nuestra base de datos.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Tambi\u00e9n necesitamos agregar estas dos columnas en nuestro modelo de usuario.<\/p>\n<p><strong>aplicaci\u00f3n \/ User.php<\/strong><\/p>\n<pre><code>\/**\n\u00a0* The attributes that are mass assignable.\n\u00a0*\n\u00a0* @var array\n\u00a0*\/\nprotected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id'\n];<\/code><\/pre>\n<h3>Crear aplicaci\u00f3n de LinkedIn<\/h3>\n<p>Para integrar el inicio de sesi\u00f3n de LinkedIn, debe crear la aplicaci\u00f3n en su cuenta de LinkedIn. Necesitamos identificaci\u00f3n de cliente, secreto de cliente de la aplicaci\u00f3n de LinkedIn. Tambi\u00e9n necesitamos establecer una URL de redireccionamiento autorizada en la aplicaci\u00f3n.<\/p>\n<ul>\n<li>Vaya a la <a href=\"https:\/\/www.linkedin.com\/secure\/developer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">red de desarrolladores de LinkedIn<\/a>.<\/li>\n<li>Haga clic en el bot\u00f3n &#8216;Crear aplicaci\u00f3n&#8217;.<\/li>\n<li>Complete la informaci\u00f3n del formulario.<\/li>\n<li>Agregue <code>http:\/\/localhost:8000\/linkedin\/callback<\/code>en el campo URL de redireccionamiento autorizado.<\/li>\n<li>Copie el ID de cliente y las claves secretas del cliente.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\" alt=\"Iniciar sesi\u00f3n con LinkedIn en Laravel usando Laravel Socialite\" ><\/a><\/p>\n<p>Despu\u00e9s de los pasos anteriores, debe agregar el producto &#8216;Iniciar sesi\u00f3n con LinkedIn&#8217; a su aplicaci\u00f3n de LinkedIn. Haga clic en la pesta\u00f1a &#8216;productos&#8217; y elija &#8216;Iniciar sesi\u00f3n con LinkedIn&#8217;. Al seleccionar este producto, se someter\u00e1 a revisi\u00f3n y luego se incluir\u00e1 como un producto agregado. Esto puede llevar alg\u00fan tiempo para su revisi\u00f3n. En mi caso, tom\u00f3 alrededor de 10 minutos.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\" alt=\"Iniciar sesi\u00f3n con LinkedIn en Laravel usando Laravel Socialite\" ><\/a><\/p>\n<h3>Crear rutas y controlador<\/h3>\n<p>Ahora podemos comenzar a agregar un c\u00f3digo en Laravel. Crea un controlador <code>LoginController<\/code>usando el comando:<\/p>\n<pre><code>php artisan make:controller LoginController<\/code><\/pre>\n<p>A continuaci\u00f3n, cree un archivo blade <code>login.blade.php<\/code>y agr\u00e9guele el siguiente HTML.<\/p>\n<pre><code>&lt;a href=\"{{ url('\/login\/linkedin') }}\"&gt;\n\u00a0\u00a0\u00a0\u00a0{{ __('Login with LinkedIn') }}\n&lt;\/a&gt;<\/code><\/pre>\n<p>Llame a esta vista desde el <code>index<\/code>m\u00e9todo de la <code>LoginController<\/code>siguiente manera.<\/p>\n<pre><code>public function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('login');\n}<\/code><\/pre>\n<p>Definamos las rutas para ello. Tambi\u00e9n estoy agregando algunas rutas m\u00e1s que ser\u00e1n necesarias en la siguiente parte del tutorial.<\/p>\n<pre><code>Route::get('login', 'LoginController@index');\nRoute::get('login\/{provider}', 'LoginController@redirectToProvider');\nRoute::get('{provider}\/callback', 'LoginController@handleProviderCallback');\nRoute::get('\/home', function() {\n\u00a0\u00a0\u00a0\u00a0return 'User is logged in';\n});<\/code><\/pre>\n<p>Cuando un usuario inicie sesi\u00f3n con LinkedIn, lo redireccionar\u00e9 a la <code>home<\/code>ruta. Es solo para fines de demostraci\u00f3n. Deber\u00edas cambiar esta ruta por otra.<\/p>\n<h3>Iniciar sesi\u00f3n con LinkedIn Laravel<\/h3>\n<p>Laravel tiene un paquete oficial Socialite. Este paquete nos ayuda a integrar f\u00e1cilmente el sistema de inicio de sesi\u00f3n social en Laravel. Instale este paquete usando el comando:<\/p>\n<pre><code>composer require laravel\/socialite<\/code><\/pre>\n<p>Despu\u00e9s de instalar la biblioteca, abra <code>config\/services.php<\/code>y agregue la configuraci\u00f3n de LinkedIn de la siguiente manera:<\/p>\n<pre><code>'linkedin' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('LINKEDIN_CLIENT_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('LINKEDIN_CLIENT_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('LINKEDIN_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Ahora, necesitamos agregar nuestros valores constantes en el <code>.env<\/code>archivo.<\/p>\n<pre><code>LINKEDIN_CLIENT_ID=YOUR_CLIENT_ID\nLINKEDIN_CLIENT_SECRET=YOUR_CLIENT_SECRET\nLINKEDIN_CALLBACK_URL=http:\/\/localhost:8000\/linkedin\/callback<\/code><\/pre>\n<p>Aseg\u00farese de reemplazar los marcadores de posici\u00f3n con sus valores reales. Los ajustes finales deben ir en el <code>LoginController.php<\/code>archivo. En este archivo, estamos escribiendo una funci\u00f3n que redirige a un usuario a la p\u00e1gina de inicio de sesi\u00f3n de LinkedIn y, en caso de autorizaci\u00f3n exitosa, iniciar\u00e1 la sesi\u00f3n del usuario.<\/p>\n<p><strong>LoginController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Socialite;\nuse AppModelsUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Where to redirect users after login.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var string\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $redirectTo = '\/home';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Call the view\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('login');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the Linkedin authentication page.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function redirectToProvider($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Socialite::driver($provider)-&gt;scopes(['r_liteprofile', 'r_emailaddress'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from Linkedin.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handleProviderCallback($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Socialite::driver($provider)-&gt;user();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = $this-&gt;findOrCreateUser($user, $provider);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Auth::login($authUser, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect($this-&gt;redirectTo);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* If a user has registered before using social auth, return the user\n\u00a0\u00a0\u00a0\u00a0\u00a0* else, create a new user object.\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 $user Socialite user object\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param $provider Social auth provider\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return\u00a0 User\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function findOrCreateUser($user, $provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = User::where('provider_id', $user-&gt;id)-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($authUser) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $authUser;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; $user-&gt;name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email'\u00a0\u00a0\u00a0 =&gt; $user-&gt;email,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; $provider,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider_id' =&gt; $user-&gt;id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>En nuestro <code>LoginController<\/code>, establecemos los alcances <code>['r_liteprofile',\u00a0'r_emailaddress']<\/code>necesarios para obtener informaci\u00f3n b\u00e1sica de un usuario de LinkedIn. En el m\u00e9todo de devoluci\u00f3n de llamada, estamos verificando si el usuario existe y si no lo est\u00e1, agregamos el usuario a la base de datos.<\/p>\n<p>Espero que entiendas c\u00f3mo iniciar sesi\u00f3n con LinkedIn en Laravel. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/inicio-de-sesion-de-google-en-laravel-usando-laravel-socialite\/\" title=\"Inicio de sesi\u00f3n de Google en Laravel usando Laravel Socialite\">Inicio de sesi\u00f3n de Google en Laravel usando Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-agregar-el-inicio-de-sesion-de-google-oauth-en-un-sitio-web-con-php\/\" title=\"C\u00f3mo agregar el inicio de sesi\u00f3n de Google OAuth en un sitio web con PHP\">C\u00f3mo agregar el inicio de sesi\u00f3n de Google OAuth en un sitio web con PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/cree-un-sitio-web-en-varios-idiomas-en-php-usando-laravel-framework\/\" title=\"Cree un sitio web en varios idiomas en PHP usando Laravel Framework\">Cree un sitio web en varios idiomas en PHP usando Laravel Framework<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo, le muestro c\u00f3mo agregar inicio de sesi\u00f3n con LinkedIn usando Laravel Socialite en su aplicaci\u00f3n Laravel. Utilizando el inicio de sesi\u00f3n social de sus usuarios<\/p>\n","protected":false},"author":1,"featured_media":20254,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[495],"tags":[849],"class_list":["post-29283","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29283"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29283\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/20254"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}