thumbnail

Login Social com Laravel e Google

Yuri do Monte Yuri do Monte | 5 min de leitura
há 3 meses

Login Social com Google no Laravel: Porque Pedir Senha é Coisa do Passado

Sabe aquele momento em que o usuário chega na sua aplicação e vê um formulário de registro com 15 campos? Pois é... ele fecha a aba. Bem-vindo ao mundo real. A solução? Login social com o Google. Deixe que o Google faça o trabalho pesado enquanto você toma um café.


Por Que Você Deveria Fazer Isso (Spoiler: Conversão)

  • Menos Cliques = Mais Usuários: Seu usuário não precisa lembrar mais uma senha. Ele já tem uma conta Google. Pronto.
  • Segurança de Graça: Deixe o Google se preocupar com senhas. Eles têm mais recursos que você.
  • Dados do Perfil Automáticos: Nome e email vêm de brinde. Sem formulários chatos.

Setup: Vamos Fazer Isso Funcionar

1. O Arquivo .env (Suas Credenciais Secretas)

Coloque isso no seu .env e guarde bem. Essas credenciais são como as chaves da sua casa.

GOOGLE_CLIENT_ID="GOOGLE_CLIENT_ID"
GOOGLE_CLIENT_SECRET="GOOGLE_CLIENT_SECRET"
GOOGLE_REDIRECT_URI="GOOGLE_REDIRECT_URI"

image.png 19.09 KB

2. O config/services.php (Configuração Elegante )

Adicione isso no seu arquivo de configuração:


'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => env('GOOGLE_REDIRECT_URI'),
],

Basicamente, você está dizendo ao Laravel: "Ei, quando alguém quiser logar com Google, use essas credenciais aí."

3. As Rotas (O Caminho Feliz)

No seu routes/web.php:

use App\Http\Controllers\SocialiteController;

Route::get('/auth/google', [SocialiteController::class, 'redirectToGoogle'])->name('google.login');
Route::get('/auth/google/callback', [SocialiteController::class, 'handleGoogleCallback']);

A primeira rota manda o usuário pro Google. A segunda é o Google mandando ele de volta. Simples assim.

O Controller: Onde a Mágica Acontece


<?php

namespace App\Http\Controllers;

use Exception;
use App\Models\User;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\Facades\Auth;

class SocialiteController extends Controller
{
    public function redirectToGoogle()
    {
        return Socialite::driver('google')->redirect();
    }

    public function handleGoogleCallback()
    {
        try {
            $googleUser = Socialite::driver('google')->stateless()->user();

            $user = User::where('email', $googleUser->getEmail())->first();

            if (!$user) {
                $user = User::create([
                    'name' => $googleUser->getName(),
                    'email' => $googleUser->getEmail(),
                    'google_id' => $googleUser->getId(),
                    'password' => bcrypt(str()->random(20)),
                ]);
            }

            Auth::login($user);

            return redirect()->route('posts.index');

        } catch (Exception $e) {
            \Log::error('Erro no login com Google: ' . $e->getMessage());
            return redirect()->route('login')->withErrors(['google_error' => 'Erro ao logar com o Google.']);
        }
    }
}


Entendendo o Código (Passo a Passo)

redirectToGoogle(): Basicamente um "vai lá" pro Google. Nada demais.

handleGoogleCallback(): Aqui é onde as coisas ficam interessantes:


1. Socialite::driver('google')->stateless()->user() — Pega os dados do usuário do Google. O stateless() é tipo dizer "ei, não preciso de sessão, só me dá os dados".

2. User::where('email', $googleUser->getEmail())->first() — Procura no banco se esse email já existe. Se não existir, cria um novo usuário.

3. Criando o Usuário — Se for novo, a gente cria com:


  • Nome vindo do Google
  • Email vindo do Google
  • google_id pra referência futura (útil se o usuário quiser logar com Google de novo)
  • Uma senha aleatória (porque o Google cuida da autenticação, não a gente)


4. Auth::login($user) — Loga o usuário na sua aplicação. Pronto, ele está dentro.

5. Redirecionamento — Manda ele pra página de posts. Sucesso!

6. Tratamento de Erro — Se algo der errado (conexão caiu, Google tá fora, sei lá), a gente registra o erro e manda o usuário de volta pra página de login com uma mensagem amigável.


Pronto. Seu usuário agora pode logar com um clique. Você economiza tempo, ele economiza tempo, o Google lucra. Todos ganham.

Dica de Ouro

Não esqueça de atualizar sua migration do banco de dados pra adicionar o campo google_id na tabela users. Algo assim:

Schema::table('users', function (Blueprint $table) {
    $table->string('google_id')->nullable()->unique();
});

Agora sim, você está pronto pra dominar o mundo do login social. Boa sorte!

Comentários

Realize login para comentar neste post
Este post não possui comentários