{"id":26593,"date":"2021-04-27T13:56:00","date_gmt":"2021-04-27T10:56:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26593"},"modified":"2021-10-18T04:21:13","modified_gmt":"2021-10-18T01:21:13","slug":"sistema-de-login-social-usando-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/sistema-de-login-social-usando-laravel-socialite\/","title":{"rendered":"Sistema de login social usando Laravel Socialite"},"content":{"rendered":"<p>Cr\u00e9dito: Este artigo \u00e9 inspirado neste post <a href=\"https:\/\/scotch.io\/tutorials\/laravel-social-authentication-with-socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Social Authentication with Socialite<\/a><\/p>\n<p>Voc\u00ea est\u00e1 procurando implementar um sistema de login social em seu site Laravel? Ao permitir o login social, seus usu\u00e1rios n\u00e3o precisam se registrar no seu site. Isso tamb\u00e9m nos poupa muito trabalho, como enviar link de ativa\u00e7\u00e3o e verificar conta de e-mail. Neste artigo, estudamos como adicionar um sistema de login social usando a socialite Laravel.<\/p>\n<p><a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">A<\/a> biblioteca <a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Socialite<\/a> fornece autentica\u00e7\u00e3o OAuth com Facebook, Twitter, Google, LinkedIn, GitHub e Bitbucket. O que precisamos fazer \u00e9 instalar esta biblioteca em nosso site Laravel, configur\u00e1-la, obter as chaves API de um site social e pronto.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.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-20876-60823669e70f3.png\" alt=\"Sistema de login social usando Laravel Socialite\" ><\/a><\/p>\n<h3>Criar tabela de usu\u00e1rios<\/h3>\n<p>Para implementar o sistema de login social, precisamos criar uma tabela de usu\u00e1rios que ir\u00e1 armazenar os detalhes fornecidos pelo site social.<\/p>\n<p>Se voc\u00ea tiver uma nova instala\u00e7\u00e3o de um Laravel, abra a ferramenta de linha de comando no diret\u00f3rio raiz de um projeto e execute o comando <code>php artisan make:auth<\/code>. Este comando criar\u00e1 controladores de autentica\u00e7\u00e3o como LoginController, RegisterController, etc., que est\u00e3o localizados no diret\u00f3rio app \/ Http \/ Controllers \/ Auth. Ele tamb\u00e9m cria visualiza\u00e7\u00f5es login.blade.php, register.blade.php no diret\u00f3rio resources \/ view \/ auth.<\/p>\n<p>Em seguida, abra a tabela de migra\u00e7\u00e3o para usu\u00e1rios. Modificaremos esta migra\u00e7\u00e3o padr\u00e3o e adicionaremos mais duas colunas chamadas provedor e provedor_id.<\/p>\n<pre><code>public 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;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>Como voc\u00ea pode ver, definimos as colunas de e-mail e senha como anul\u00e1veis. Por qu\u00ea? Quando usamos a autentica\u00e7\u00e3o de login social, n\u00e3o h\u00e1 garantia de obter uma id de e-mail de um usu\u00e1rio. E a senha tamb\u00e9m n\u00e3o \u00e9 necess\u00e1ria nesse caso. Portanto, mantemos o e-mail e a senha anul\u00e1veis. O provedor de coluna armazenar\u00e1 o nome do site social, como facebook, twitter, etc. A coluna provider_id armazenar\u00e1 o id social de um usu\u00e1rio respectivo ao site social.<\/p>\n<p>Depois de modificar a migra\u00e7\u00e3o do usu\u00e1rio conforme descrito acima, execute o comando <code>php artisan migrate<\/code>. Isso criar\u00e1 uma tabela chamada &#8216;usu\u00e1rios&#8217; em seu banco de dados.<\/p>\n<p>Provavelmente, ao executar o comando de migra\u00e7\u00e3o, voc\u00ea obter\u00e1 algum erro estranho relacionado ao comprimento do caractere. Em caso afirmativo, abra o arquivo AppServiceProvider.php do diret\u00f3rio app \/ Providers. Neste arquivo, precisamos definir o comprimento da string padr\u00e3o para as colunas da tabela do banco de dados.<\/p>\n<p>Arquivo AppServiceProvider.php<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse IlluminateSupportServiceProvider;\nuse IlluminateSupportFacadesSchema;\n\u00a0\nclass AppServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Bootstrap any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::defaultStringLength(255);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function register()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>Modelo de Usu\u00e1rio<\/h3>\n<p>Por padr\u00e3o, o Laravel inclui um modelo do AppUser Eloquent no diret\u00f3rio do seu aplicativo. Abra o User.php na pasta do aplicativo. Adicione mais duas colunas provedor, provider_id \u00e0 vari\u00e1vel $ fillable.<\/p>\n<pre><code>protected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id',\n];<\/code><\/pre>\n<h3>Instalar e configurar o Laravel Socialite<\/h3>\n<p>Para instalar esta biblioteca, voc\u00ea deve ter o <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">composer<\/a> instalado em seu sistema.<\/p>\n<p>Em sua ferramenta de linha de comando, execute o comando abaixo.<\/p>\n<p><code>composer require laravel\/socialite<\/code><\/p>\n<p>Ap\u00f3s instalar a biblioteca, registre LaravelSocialiteSocialiteServiceProvider em seu arquivo de configura\u00e7\u00e3o config \/ app.php.<\/p>\n<pre><code>'providers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\/\/ Other service providers...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0LaravelSocialiteSocialiteServiceProvider::class,\n],<\/code><\/pre>\n<p>No mesmo arquivo config \/ app.php, na matriz aliases, adicione Socialite facade.<\/p>\n<pre><code>'Socialite' =&gt; LaravelSocialiteFacadesSocialite::class,<\/code><\/pre>\n<p>Agora \u00e9 hora de registrar seu aplicativo no site social. Por exemplo, presumimos que voc\u00ea deseja implementar a autentica\u00e7\u00e3o de login do Facebook. Ent\u00e3o v\u00e1 em frente e <a href=\"https:\/\/developers.facebook.com\/docs\/apps\/register\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crie um aplicativo no Facebook<\/a>.<\/p>\n<p>Assim que estiver pronto com o id do aplicativo, o segredo do aplicativo do Facebook, abra o arquivo config \/ services.php e adicione o c\u00f3digo abaixo a ele.<\/p>\n<pre><code>'facebook' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('FB_APP_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('FB_APP_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('FB_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Conforme mostrado no c\u00f3digo acima, temos que armazenar os detalhes do nosso aplicativo e a URL de retorno de chamada no arquivo .env.<\/p>\n<pre><code>FB_APP_ID=PASTE_APP_ID_HERE\nFB_APP_SECRET=PASTE_APP_SECRET_HERE\nFB_CALLBACK_URL=YOU_SITE_URL\/login\/facebook\/callback<\/code><\/pre>\n<p>Passamos o URL de retorno de chamada como YOU_SITE_URL \/ login \/ facebook \/ retorno de chamada. Agora \u00e9 hora de criar duas rotas, uma para redirecionar o usu\u00e1rio ao provedor OAuth (no nosso caso, Facebook) e outra para receber o callback do provedor ap\u00f3s a autentica\u00e7\u00e3o.<\/p>\n<h3>C\u00f3digo real para lidar com OAuth<\/h3>\n<p>Neste est\u00e1gio, conclu\u00edmos todas as configura\u00e7\u00f5es do Laravel Socialite. \u00c9 hora de escrever algum c\u00f3digo que lida com o redirecionamento OAuth e busque os detalhes do usu\u00e1rio.<\/p>\n<p>Abra seu arquivo login.blade.php e coloque o c\u00f3digo abaixo nele, provavelmente ap\u00f3s o bot\u00e3o de envio.<\/p>\n<pre><code>&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-md-6 col-md-offset-4\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Login with\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/facebook') }}\"&gt;&lt;i class=\"fa fa-facebook-official\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Facebook&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/twitter') }}\"&gt;&lt;i class=\"fa fa-twitter\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Twitter&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/github') }}\"&gt;&lt;i class=\"fa fa-github\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Github&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Aqui, estamos adicionando um link para Github e Twitter. As etapas para adicionar OAuth para esses sites sociais tamb\u00e9m s\u00e3o iguais \u00e0s do Facebook. Voc\u00ea s\u00f3 precisa criar um aplicativo dos respectivos sites sociais e armazenar esses detalhes da mesma forma que adicionamos para o Facebook.<\/p>\n<p>Em seu arquivo de rota, defina as rotas conforme abaixo.<\/p>\n<pre><code>Route::get('login\/{provider}', 'AuthLoginController@redirectToProvider');\nRoute::get('login\/{provider}\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre>\n<p>Em seguida, navegue at\u00e9 app \/ Http \/ Controllers \/ Auth \/ LoginController.php e modifique o arquivo. Voc\u00ea deve adicionar o c\u00f3digo abaixo nele.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllersAuth;\n\u00a0\nuse AppHttpControllersController;\nuse IlluminateFoundationAuthAuthenticatesUsers;\nuse Socialite;\nuse AppUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the GitHub 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(['email'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from GitHub.\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\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>O m\u00e9todo redirectToProvider redireciona o usu\u00e1rio para a p\u00e1gina de login de um site social. Depois que o usu\u00e1rio autoriza o aplicativo, buscamos as informa\u00e7\u00f5es do usu\u00e1rio na fun\u00e7\u00e3o handleProviderCallback. Se o usu\u00e1rio n\u00e3o existe em nosso sistema, adicionamos seus detalhes usando o m\u00e9todo findOrCreateUser.<\/p>\n<p>Esperamos que voc\u00ea conhe\u00e7a o sistema de login social usando o Laravel Socialite. Se voc\u00ea tiver alguma d\u00favida ou sugest\u00e3o, por favor, deixe um coment\u00e1rio abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-usar-o-recurso-de-conexoes-multiplas-de-banco-de-dados-do-laravel-em-um-site\/\" title=\"Como usar o recurso de conex\u00f5es m\u00faltiplas de banco de dados do Laravel em um site\">Como usar o recurso de conex\u00f5es m\u00faltiplas de banco de dados do Laravel em um site<\/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>Se voc\u00ea deseja adicionar um sistema de login social ao seu site Laravel, ent\u00e3o o Laravel Socialite \u00e9 uma biblioteca que nos ajuda a configurar este sistema.<\/p>\n","protected":false},"author":1,"featured_media":21626,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[142,502],"tags":[848],"class_list":["post-26593","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sem-categoria","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/26593","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=26593"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/26593\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21626"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=26593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=26593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=26593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}