Resetting Password com Laravel

Laravel
Tempo de leitura: 4 minutos

Resetting Password com Laravel: A funcionalidade “Esqueci minha Senha” é essencial para a experiência do usuário e a segurança de qualquer aplicação. O Laravel oferece um sistema de recuperação de senhas completo e seguro, baseado em tokens únicos e e-mails de notificação.

Este artigo explora como configurar e otimizar esse fluxo, desde a estrutura de dados até a manutenção de tokens.

1. ⚙️ Preparação Essencial (Model e Tabela)

O sistema de reset de senha depende de dois componentes principais: o modelo do usuário e uma tabela dedicada para armazenar os tokens temporários.

A. Modelo de Usuário

Seu modelo User deve ser capaz de enviar o e-mail de notificação.

PHP

namespace App\Models;
// ...
use Illuminate\Notifications\Notifiable; // <-- Essencial

class User extends Authenticatable
{
    use HasFactory, Notifiable;
    // ...
}

B. Tabela password_resets

Esta tabela armazena o token único e temporário que é enviado ao usuário e associado ao seu e-mail.

-> Migração (se não existir):

Bash

php artisan make:migration create_password_resets_table

-> Estrutura da Tabela:

PHP

// database/migrations/..._create_password_resets_table.php 

public function up(): void { 
    Schema::create('password_resets', function (Blueprint $table) { 
        $table->string('email')->index(); 
        $table->string('token'); // O token seguro 
        $table->timestamp('created_at')->nullable(); 
    }); 
}

-> Execução:

Bash

php artisan migrate

2. 📧 Fluxo e Rotas Padrão

O Laravel já fornece os Controllers (ForgotPasswordController e ResetPasswordController) e as rotas necessárias para gerenciar o processo.

A. Rotas de Autenticação

Usar Auth::routes(['verify' => true]) ou a configuração manual registra quatro rotas principais:

RotaNomeFunção
GET /password/resetpassword.requestMostra o formulário para inserir o e-mail.
POST /password/emailpassword.emailEnvia o e-mail com o link de reset (token).
GET /password/reset/{token}password.resetMostra o formulário para redefinir a senha.
POST /password/resetpassword.updateProcessa a nova senha e loga o usuário.

B. O E-mail de Reset

O Laravel envia uma Notificação padrão (Mailable) contendo o link. Você pode personalizar o e-mail criando uma View Blade em resources/views/vendor/mail/html/message.blade.php ou personalizando a notificação.

3. 🌐 Configuração de E-mail (Exemplo Hostinger)

É crucial que o serviço de e-mail (SMTP) esteja corretamente configurado para que o link de reset chegue ao usuário.

No seu arquivo .env, ajuste as configurações para o seu provedor.

.ENV

MAIL_MAILER=smtp
MAIL_HOST=smtp.hostinger.com
MAIL_PORT=587
MAIL_USERNAME="[email protected]"
MAIL_PASSWORD="sua_senha_de_email_smtp"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"

4. 🧹 Manutenção: Excluindo Tokens Expirados

Por padrão, os tokens expiram após 60 minutos (configurável em config/auth.php), mas permanecem na tabela password_resets. Criar um comando agendado é a melhor prática para limpar essa tabela.

A. Criando o Comando Artisan

Bash

php artisan make:command ClearExpiredPasswordResets

B. Implementação da Lógica de Limpeza

PHP

// app/Console/Commands/ClearExpiredPasswordResets.php

use Illuminate\Support\Facades\DB;
use Carbon\Carbon;

class ClearExpiredPasswordResets extends Command
{
    // ...
    protected $signature = 'password:clear-expired';

    public function handle()
    {
        // Define o limite de tempo (ex: tokens criados há mais de 2 horas)
        $limit = Carbon::now()->subHours(2); 

        DB::table('password_resets')
            ->where('created_at', '<', $limit) 
            ->delete();

        $this->info('Tokens de reset de senha expirados limpos.');
    }
}

C. Agendando a Execução (Kernel)

Registre o comando no app/Console/Kernel.php para que ele seja executado periodicamente.

PHP

// app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
    // Executa o comando de limpeza diariamente
    $schedule->command('password:clear-expired')->daily(); 
}

Atenção: Certifique-se de que o Laravel Scheduler esteja configurado no seu servidor (* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1).

✅ Conclusão Resetting Password com Laravel

Resetting Password com Laravel: O sistema de recuperação de senhas é uma prova da arquitetura robusta do Laravel, que fornece todo o boilerplate de segurança necessário (tabela password_resets, middleware de token seguro). Ao garantir a correta configuração do e-mail e implementar a limpeza de tokens expirados via Laravel Scheduler, você oferece um processo de recuperação eficiente, seguro e bem mantido para seus usuários.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.