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"
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