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:
| Rota | Nome | Função |
GET /password/reset | password.request | Mostra o formulário para inserir o e-mail. |
POST /password/email | password.email | Envia o e-mail com o link de reset (token). |
GET /password/reset/{token} | password.reset | Mostra o formulário para redefinir a senha. |
POST /password/reset | password.update | Processa 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:
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:















