{"id":28501,"date":"2021-06-12T12:49:00","date_gmt":"2021-06-12T09:49:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28501"},"modified":"2021-10-18T04:00:35","modified_gmt":"2021-10-18T01:00:35","slug":"faca-login-com-o-linkedin-no-laravel-usando-o-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/faca-login-com-o-linkedin-no-laravel-usando-o-laravel-socialite\/","title":{"rendered":"Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite"},"content":{"rendered":"<p>Adicionar sistema de login social no site \u00e9 a tend\u00eancia hoje em dia. Ao integrar o login social, ele ir\u00e1 ignorar o processo de verifica\u00e7\u00e3o de um usu\u00e1rio. Os sites sociais j\u00e1 verificaram usu\u00e1rios, portanto, nosso aplicativo n\u00e3o precisa seguir o mesmo processo com um usu\u00e1rio. Podemos contar com sites de redes sociais e permitir que o usu\u00e1rio use nosso sistema se fizer login atrav\u00e9s de um site de redes sociais em nosso site. Facebook, Twitter, Google, LinkedIn s\u00e3o os sites sociais populares que normalmente s\u00e3o integrados como um login social ao site. Neste artigo, vamos cobrir um login com LinkedIn no Laravel.<\/p>\n<p>Para o nosso tutorial, irei integrar o login do LinkedIn na nova instala\u00e7\u00e3o do Laravel. Vou instalar o Laravel, criar uma tabela de &#8216;usu\u00e1rios&#8217; e instalar os pacotes necess\u00e1rios para integrar o sistema de login social.<\/p>\n<p>Execute o comando abaixo para instalar o Laravel. Aqui estou criando um projeto como &#8216;linkedinlogin&#8217;.<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel linkedinlogin<\/code><\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o, crie o banco de dados e defina as credenciais no <code>.env<\/code>arquivo. Estamos construindo um sistema de login, portanto, devemos armazenar os detalhes do usu\u00e1rio no banco de dados.<\/p>\n<p>Este tutorial \u00e9 baseado no login do LinkedIn, portanto, obteremos o ID do perfil do usu\u00e1rio no LinkedIn ap\u00f3s a autentica\u00e7\u00e3o bem-sucedida. Para armazenar esse id social, estamos adicionando as colunas provider e provider_id. Aqui, a coluna do provedor armazenar\u00e1 o valor &#8216;linkedin&#8217; e o provider_id armazenar\u00e1 o ID social do usu\u00e1rio.<\/p>\n<p>Quando usamos o login social, n\u00e3o precisamos armazenar senhas, ent\u00e3o o valor da coluna de senha deve aceitar &#8216;NULL&#8217; como padr\u00e3o. N\u00e3o h\u00e1 garantia de obter o e-mail do usu\u00e1rio ap\u00f3s o login social, portanto, por curiosidade, precisamos definir a coluna de e-mail tamb\u00e9m para aceitar &#8216;NULL&#8217;.<\/p>\n<p>Abra o arquivo de migra\u00e7\u00e3o da tabela de usu\u00e1rios e adicione o c\u00f3digo abaixo.<\/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>Execute o comando abaixo que ir\u00e1 criar as tabelas em nosso banco de dados.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Tamb\u00e9m precisamos adicionar essas duas colunas em nosso modelo de usu\u00e1rio.<\/p>\n<p><strong>app \/ 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>Criar aplicativo LinkedIn<\/h3>\n<p>Para integrar o login do LinkedIn, voc\u00ea deve criar o aplicativo em sua conta do LinkedIn. Precisamos do ID do cliente, segredo do cliente do aplicativo LinkedIn. Tamb\u00e9m precisamos definir um URL de redirecionamento autorizado no aplicativo.<\/p>\n<ul>\n<li>V\u00e1 para <a href=\"https:\/\/www.linkedin.com\/secure\/developer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">LinkedIn Developer Network<\/a>.<\/li>\n<li>Clique no bot\u00e3o &#8216;Criar aplicativo&#8217;.<\/li>\n<li>Preencha as informa\u00e7\u00f5es do formul\u00e1rio.<\/li>\n<li>Adicione <code>http:\/\/localhost:8000\/linkedin\/callback<\/code>no campo URLs de redirecionamento autorizado.<\/li>\n<li>Copie o ID do cliente e as chaves secretas do 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=\"Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite\" ><\/a><\/p>\n<p>Ap\u00f3s as etapas acima, voc\u00ea precisa adicionar o produto &#8216;Sign in With LinkedIn&#8217; ao seu aplicativo LinkedIn. Clique na guia &#8216;produtos&#8217; e escolha &#8216;Sign In with LinkedIn&#8217;. Ao selecionar este produto, ele ir\u00e1 para revis\u00e3o e ent\u00e3o inclu\u00eddo como um produto adicionado. Isso pode levar algum tempo para revis\u00e3o. No meu caso, demorou cerca 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=\"Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite\" ><\/a><\/p>\n<h3>Criar rotas e controlador<\/h3>\n<p>Agora podemos come\u00e7ar a adicionar um c\u00f3digo no Laravel. Crie um controlador <code>LoginController<\/code>usando o comando:<\/p>\n<pre><code>php artisan make:controller LoginController<\/code><\/pre>\n<p>Em seguida, crie um arquivo blade <code>login.blade.php<\/code>e adicione o seguinte HTML a ele.<\/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>Chame essa vis\u00e3o a partir do <code>index<\/code>m\u00e9todo a <code>LoginController<\/code>seguir.<\/p>\n<pre><code>public function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('login');\n}<\/code><\/pre>\n<p>Vamos definir as rotas para isso. Tamb\u00e9m estou adicionando mais algumas rotas que ser\u00e3o necess\u00e1rias na pr\u00f3xima parte do 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>Quando um usu\u00e1rio fizer o login com o LinkedIn, vou redirecion\u00e1-lo para a <code>home<\/code>rota. \u00c9 apenas para fins de demonstra\u00e7\u00e3o. Voc\u00ea deve alterar esta rota para outra coisa.<\/p>\n<h3>Entrar com LinkedIn Laravel<\/h3>\n<p>O Laravel tem um pacote oficial Socialite. Este pacote nos ajuda a integrar facilmente o sistema de login social no Laravel. Instale este pacote usando o comando:<\/p>\n<pre><code>composer require laravel\/socialite<\/code><\/pre>\n<p>Depois de instalar a biblioteca, abra <code>config\/services.php<\/code>e adicione a configura\u00e7\u00e3o do LinkedIn da seguinte forma:<\/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>Agora, precisamos adicionar nossos valores constantes no <code>.env<\/code>arquivo.<\/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>Certifique-se de substituir os marcadores de posi\u00e7\u00e3o por seus valores reais. Os ajustes finais devem ir no <code>LoginController.php<\/code>arquivo. Neste arquivo, estamos escrevendo uma fun\u00e7\u00e3o que redireciona um usu\u00e1rio para a p\u00e1gina de login do LinkedIn e, com a autoriza\u00e7\u00e3o bem-sucedida, far\u00e1 o login do usu\u00e1rio.<\/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>Em nosso <code>LoginController<\/code>, definimos os escopos <code>['r_liteprofile',\u00a0'r_emailaddress']<\/code>necess\u00e1rios para buscar informa\u00e7\u00f5es b\u00e1sicas de um usu\u00e1rio do LinkedIn. No m\u00e9todo de retorno de chamada, estamos verificando se o usu\u00e1rio existe e, caso n\u00e3o exista, adicionamos o usu\u00e1rio ao banco de dados.<\/p>\n<p>Espero que voc\u00ea entenda como fazer o Login com o LinkedIn no Laravel. Eu gostaria de ouvir seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/login-do-google-no-laravel-usando-laravel-socialite\/\" title=\"Login do Google no Laravel usando Laravel Socialite\">Login do Google no Laravel usando Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-adicionar-o-login-do-google-oauth-a-um-site-com-php\/\" title=\"Como adicionar o login do Google OAuth a um site com PHP\">Como adicionar o login do Google OAuth a um site com PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/crie-um-site-multilingue-em-php-usando-o-laravel-framework\/\" title=\"Crie um site multil\u00edngue em PHP usando o Laravel Framework\">Crie um site multil\u00edngue em PHP usando o Laravel Framework<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo, mostrarei como adicionar login com o LinkedIn usando o Laravel Socialite em seu aplicativo Laravel. Usando o login social de seus usu\u00e1rios<\/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":[502],"tags":[848],"class_list":["post-28501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28501"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28501\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20254"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}