{"id":28519,"date":"2021-06-12T16:59:00","date_gmt":"2021-06-12T13:59:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28519"},"modified":"2021-10-18T04:00:32","modified_gmt":"2021-10-18T01:00:32","slug":"login-do-google-no-laravel-usando-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/login-do-google-no-laravel-usando-laravel-socialite\/","title":{"rendered":"Login do Google no Laravel usando Laravel Socialite"},"content":{"rendered":"<p>Recentemente publiquei um artigo <a href=\"https:\/\/themewp.inform.click\/pt-pt\/faca-login-com-o-linkedin-no-laravel-usando-o-laravel-socialite\/\" title=\"Login com LinkedIn usando Laravel Socialite\" >Login com LinkedIn usando Laravel Socialite<\/a> e um de nossos leitores perguntou sobre a integra\u00e7\u00e3o do Google Login no Laravel. O login do Google tamb\u00e9m \u00e9 uma das plataformas populares usadas para login social no site.<\/p>\n<p>Ao permitir que os usu\u00e1rios fa\u00e7am login com seus perfis sociais em seu site, voc\u00ea pula o processo de valida\u00e7\u00e3o de seus e-mails. Seus usu\u00e1rios n\u00e3o precisam seguir um processo de ativa\u00e7\u00e3o por e-mail. Podemos confiar nos sites sociais, pois eles j\u00e1 validaram os usu\u00e1rios em sua plataforma. Oferece uma melhor experi\u00eancia de usu\u00e1rio para seus usu\u00e1rios, pois eles n\u00e3o precisam se lembrar de suas credenciais de login para o seu site e tamb\u00e9m evita que voc\u00ea adicione c\u00f3digos para o fluxo de verifica\u00e7\u00e3o. \u00c9 uma situa\u00e7\u00e3o ganha-ganha.<\/p>\n<p>Neste artigo, estudamos o guia passo a passo sobre como adicionar o login do Google no Laravel usando o Laravel Socialite. A socialite Laravel lida com o fluxo OAuth para login social nos bastidores. Este pacote acelera o processo de integra\u00e7\u00e3o do login social no Laravel.<\/p>\n<p>Para este tutorial, usarei uma instala\u00e7\u00e3o nova do Laravel, ent\u00e3o execute o comando abaixo que instalar\u00e1 o Laravel para voc\u00ea:<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel googlelogin<\/code><\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o do Laravel, crie um banco de dados e adicione suas credenciais de banco de dados no <code>.env<\/code>arquivo. Como estamos adicionando o login social no aplicativo, adicionarei mais 2 colunas ao arquivo de migra\u00e7\u00e3o de usu\u00e1rio padr\u00e3o e modificarei um pouco seu c\u00f3digo.<\/p>\n<p>Abra o arquivo de migra\u00e7\u00e3o do seu usu\u00e1rio e adicione o c\u00f3digo abaixo ao <code>up<\/code>m\u00e9todo.<\/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;bigIncrements('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>No c\u00f3digo acima, adicionei 2 colunas <code>provider<\/code>e <code>provider_id<\/code>que conter\u00e3o os valores &#8216;google&#8217; e o id do perfil do usu\u00e1rio no Google, respectivamente. Crie a tabela de &#8216;usu\u00e1rios&#8217; executando o comando migrate.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m precisa adicionar essas 2 colunas ao modelo do 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>Crie um aplicativo do Google e obtenha suas credenciais<\/h3>\n<p>Em seguida, precisamos criar um projeto no console de APIs do Google. Exigiremos o ID do cliente e o segredo do cliente do aplicativo para concluir o processo OAuth para os usu\u00e1rios.<\/p>\n<p>Siga as etapas abaixo para criar um projeto do Google e obter as credenciais. Para o bem do tutorial, estou usando a URL do servidor local. Voc\u00ea pode ajustar este URL de acordo com sua necessidade.<\/p>\n<ul>\n<li>V\u00e1 para o <a href=\"https:\/\/console.developers.google.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Google Developer Console<\/a>.<\/li>\n<li>Clique no menu suspenso e crie um novo projeto clicando no sinal (+). Como alternativa, voc\u00ea tamb\u00e9m pode selecionar o projeto existente.<\/li>\n<li>No painel do projeto, selecione Credenciais na barra lateral.<\/li>\n<li>Na guia Credenciais, clique na lista suspensa Criar credenciais e selecione ID do cliente OAuth.<\/li>\n<li>Selecione o aplicativo da Web no tipo de aplicativo. Em URLs de redirecionamento autorizados, insira o URL <code>http:\/\/localhost:8000\/google\/callback<\/code>.<\/li>\n<\/ul>\n<p>Depois de salv\u00e1-lo, voc\u00ea receber\u00e1 o pop-up junto com seu ID de cliente e segredo do cliente. Copie essas chaves que iremos exigir em alguns momentos.<\/p>\n<h3>Criar rotas e controlador<\/h3>\n<p>Voc\u00ea est\u00e1 pronto com suas chaves de API. Agora, para prosseguir, temos que criar rotas, arquivo blade e controlador. Crie um <code>LoginController<\/code>usando o comando:<\/p>\n<pre><code>php artisan make:controller LoginController<\/code><\/pre>\n<p>Depois disso, crie um arquivo blade chamado <code>login.blade.php<\/code>e adicione o HTML abaixo a ele.<\/p>\n<pre><code>&lt;a href=\"{{ url('\/login\/google') }}\"&gt;\n\u00a0\u00a0\u00a0\u00a0{{ __('Login with Google') }}\n&lt;\/a&gt;<\/code><\/pre>\n<p>Chame essa vis\u00e3o do <code>index<\/code>m\u00e9todo de <code>LoginController<\/code>.<\/p>\n<pre><code>public function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('login');\n}<\/code><\/pre>\n<p>Para chamar esta vista, voc\u00ea precisa adicionar uma rota para ela. Vamos adicionar mais algumas rotas que tamb\u00e9m ser\u00e3o necess\u00e1rias para a 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>Observe que adicionei uma <code>home<\/code>rota. Quando um usu\u00e1rio fizer o login com o Google, vou redirecion\u00e1-lo para a <code>home<\/code>rota. Eu apenas o mantenho para fins de demonstra\u00e7\u00e3o. Voc\u00ea deve alterar esta rota para outra coisa.<\/p>\n<h3>Login do Google no Laravel usando Laravel Socialite<\/h3>\n<p>At\u00e9 agora, conclu\u00edmos a configura\u00e7\u00e3o b\u00e1sica necess\u00e1ria para o login social. Agora. \u00e9 hora de instalar a biblioteca <a href=\"https:\/\/laravel.com\/docs\/master\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Socialite<\/a>. Instale-o executando o comando abaixo no terminal.<\/p>\n<pre><code>composer require laravel\/socialite<\/code><\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o da biblioteca, abra <code>config\/services.php<\/code>e adicione a configura\u00e7\u00e3o do Google da seguinte forma:<\/p>\n<pre><code>'google' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id'\u00a0\u00a0\u00a0\u00a0 =&gt; env('GOOGLE_CLIENT_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('GOOGLE_CLIENT_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect'\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; env('GOOGLE_REDIRECT_URL'),\n],<\/code><\/pre>\n<p>Como usamos o <code>env<\/code>m\u00e9todo para obter credenciais, precisamos adicionar essas credenciais ao <code>.env<\/code>arquivo.<\/p>\n<pre><code>GOOGLE_CLIENT_ID=YOUR_CLIENT_ID\nGOOGLE_CLIENT_SECRET=YOUR_CLIENT_SECRET\nGOOGLE_REDIRECT_URL=http:\/\/localhost:8000\/google\/callback<\/code><\/pre>\n<p>Certifique-se de substituir os marcadores de posi\u00e7\u00e3o por valores reais. Finalmente, precisamos adicionar o c\u00f3digo no <code>LoginController.php<\/code>arquivo que redireciona o usu\u00e1rio para a p\u00e1gina de login do Google e, em troca, trata da resposta. Neste arquivo, estamos escrevendo uma fun\u00e7\u00e3o que redireciona um usu\u00e1rio para a p\u00e1gina de login do Google e, com a autoriza\u00e7\u00e3o bem-sucedida, ir\u00e1 inserir os detalhes do usu\u00e1rio no banco de dados e fazer o login do usu\u00e1rio.<\/p>\n<p><strong>LoginController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\u00a0\nnamespace AppHttpControllers;\n\u00a0\u00a0\nuse IlluminateHttpRequest;\nuse Socialite;\nuse AppModelsUser;\nuse Auth;\n\u00a0\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\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\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the Google 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;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from Google.\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\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 arquivo de controlador, estamos verificando se o usu\u00e1rio com <code>provider_id<\/code>j\u00e1 existe ou n\u00e3o. Se existir, retorne a inst\u00e2ncia do usu\u00e1rio atual, caso contr\u00e1rio, insira-o na tabela de usu\u00e1rios e efetue o login do usu\u00e1rio.<\/p>\n<p>Espero que voc\u00ea conhe\u00e7a o Google Login no Laravel usando o pacote Socialite. 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\/faca-login-com-o-linkedin-no-laravel-usando-o-laravel-socialite\/\" title=\"Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite\">Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/faca-login-com-o-twitter-no-laravel-usando-o-laravel-socialite\/\" title=\"Fa\u00e7a login com o Twitter no Laravel usando o Laravel Socialite\">Fa\u00e7a login com o Twitter no Laravel usando o 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<\/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, estudamos o login do Google no Laravel usando o Laravel Socialite. O uso de login social oferece uma melhor experi\u00eancia de usu\u00e1rio para o usu\u00e1rio final<\/p>\n","protected":false},"author":1,"featured_media":20248,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-28519","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\/28519","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=28519"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28519\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20248"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}