{"id":3238,"date":"2024-12-20T14:23:53","date_gmt":"2024-12-20T17:23:53","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=3238"},"modified":"2025-12-10T09:56:07","modified_gmt":"2025-12-10T12:56:07","slug":"resetting-password-com-laravel","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/","title":{"rendered":"Resetting Password com Laravel"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Resetting Password com Laravel<\/strong>: A funcionalidade &#8220;Esqueci minha Senha&#8221; \u00e9 essencial para a experi\u00eancia do usu\u00e1rio e a seguran\u00e7a de qualquer aplica\u00e7\u00e3o. O Laravel oferece um sistema de recupera\u00e7\u00e3o de senhas completo e seguro, baseado em <strong>tokens \u00fanicos<\/strong> e <strong>e-mails de notifica\u00e7\u00e3o<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Este artigo explora como configurar e otimizar esse fluxo, desde a estrutura de dados at\u00e9 a manuten\u00e7\u00e3o de tokens.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. \u2699\ufe0f Prepara\u00e7\u00e3o Essencial (Model e Tabela)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O sistema de reset de senha depende de dois componentes principais: o modelo do usu\u00e1rio e uma tabela dedicada para armazenar os tokens tempor\u00e1rios.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Modelo de Usu\u00e1rio<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Seu modelo <code>User<\/code> deve ser capaz de enviar o e-mail de notifica\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace App\\Models;\n\/\/ ...\nuse Illuminate\\Notifications\\Notifiable; \/\/ &lt;-- Essencial\n\nclass User extends Authenticatable\n{\n    use HasFactory, Notifiable;\n    \/\/ ...\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Tabela <code>password_resets<\/code><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Esta tabela armazena o <strong>token \u00fanico e tempor\u00e1rio<\/strong> que \u00e9 enviado ao usu\u00e1rio e associado ao seu e-mail.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">-> <strong>Migra\u00e7\u00e3o (se n\u00e3o existir):<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>php artisan make:migration create_password_resets_table<\/code><\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">-> <strong>Estrutura da Tabela:<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ database\/migrations\/..._create_password_resets_table.php \n\npublic function up(): void { \n    Schema::create('password_resets', function (Blueprint $table) { \n        $table->string('email')->index(); \n        $table->string('token'); \/\/ O token seguro \n        $table->timestamp('created_at')->nullable(); \n    }); \n}<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">-> <strong>Execu\u00e7\u00e3o<\/strong>:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>php artisan migrate<\/code><\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. \ud83d\udce7 Fluxo e Rotas Padr\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Laravel j\u00e1 fornece os Controllers (<code>ForgotPasswordController<\/code> e <code>ResetPasswordController<\/code>) e as rotas necess\u00e1rias para gerenciar o processo.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Rotas de Autentica\u00e7\u00e3o<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Usar <code>Auth::routes(['verify' =&gt; true])<\/code> ou a configura\u00e7\u00e3o manual registra quatro rotas principais:<\/p>\n\n\n\n<figure class=\"wp-block-table has-medium-font-size\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Rota<\/strong><\/td><td><strong>Nome<\/strong><\/td><td><strong>Fun\u00e7\u00e3o<\/strong><\/td><\/tr><\/thead><tbody><tr><td><code>GET \/password\/reset<\/code><\/td><td><code>password.request<\/code><\/td><td>Mostra o formul\u00e1rio para inserir o e-mail.<\/td><\/tr><tr><td><code>POST \/password\/email<\/code><\/td><td><code>password.email<\/code><\/td><td>Envia o e-mail com o link de reset (token).<\/td><\/tr><tr><td><code>GET \/password\/reset\/{token}<\/code><\/td><td><code>password.reset<\/code><\/td><td>Mostra o formul\u00e1rio para redefinir a senha.<\/td><\/tr><tr><td><code>POST \/password\/reset<\/code><\/td><td><code>password.update<\/code><\/td><td>Processa a nova senha e loga o usu\u00e1rio.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. O E-mail de Reset<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Laravel envia uma <strong>Notifica\u00e7\u00e3o<\/strong> padr\u00e3o (Mailable) contendo o link. Voc\u00ea pode personalizar o e-mail criando uma <em>View<\/em> Blade em <code>resources\/views\/vendor\/mail\/html\/message.blade.php<\/code> ou personalizando a notifica\u00e7\u00e3o.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. \ud83c\udf10 Configura\u00e7\u00e3o de E-mail (Exemplo Hostinger)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">\u00c9 crucial que o servi\u00e7o de e-mail (SMTP) esteja corretamente configurado para que o link de reset chegue ao usu\u00e1rio.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No seu arquivo <code>.env<\/code>, ajuste as configura\u00e7\u00f5es para o seu provedor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.ENV<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MAIL_MAILER=smtp\nMAIL_HOST=smtp.hostinger.com\nMAIL_PORT=587\nMAIL_USERNAME=\"seu_email@seudominio.com\"\nMAIL_PASSWORD=\"sua_senha_de_email_smtp\"\nMAIL_ENCRYPTION=tls\nMAIL_FROM_ADDRESS=\"seu_email@seudominio.com\"\nMAIL_FROM_NAME=\"${APP_NAME}\"\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. \ud83e\uddf9 Manuten\u00e7\u00e3o: Excluindo Tokens Expirados<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Por padr\u00e3o, os tokens expiram ap\u00f3s <strong>60 minutos<\/strong> (configur\u00e1vel em <code>config\/auth.php<\/code>), mas permanecem na tabela <code>password_resets<\/code>. Criar um comando agendado \u00e9 a melhor pr\u00e1tica para limpar essa tabela.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Criando o Comando Artisan<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:command ClearExpiredPasswordResets\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Implementa\u00e7\u00e3o da L\u00f3gica de Limpeza<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ app\/Console\/Commands\/ClearExpiredPasswordResets.php\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Carbon\\Carbon;\n\nclass ClearExpiredPasswordResets extends Command\n{\n    \/\/ ...\n    protected $signature = 'password:clear-expired';\n\n    public function handle()\n    {\n        \/\/ Define o limite de tempo (ex: tokens criados h\u00e1 mais de 2 horas)\n        $limit = Carbon::now()-&gt;subHours(2); \n\n        DB::table('password_resets')\n            -&gt;where('created_at', '&lt;', $limit) \n            -&gt;delete();\n\n        $this-&gt;info('Tokens de reset de senha expirados limpos.');\n    }\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">C. Agendando a Execu\u00e7\u00e3o (Kernel)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Registre o comando no <strong><code>app\/Console\/Kernel.php<\/code><\/strong> para que ele seja executado periodicamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ app\/Console\/Kernel.php\n\nprotected function schedule(Schedule $schedule)\n{\n    \/\/ Executa o comando de limpeza diariamente\n    $schedule-&gt;command('password:clear-expired')-&gt;daily(); \n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Aten\u00e7\u00e3o:<\/strong> Certifique-se de que o <strong>Laravel Scheduler<\/strong> esteja configurado no seu servidor (<code>* * * * * cd \/path-to-your-project &amp;&amp; php artisan schedule:run &gt;&gt; \/dev\/null 2&gt;&amp;1<\/code>).<\/p>\n<\/blockquote>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">\u2705 Conclus\u00e3o Resetting Password com Laravel<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Resetting Password com Laravel<\/strong>: O sistema de recupera\u00e7\u00e3o de senhas \u00e9 uma prova da arquitetura robusta do Laravel, que fornece todo o <em>boilerplate<\/em> de seguran\u00e7a necess\u00e1rio (tabela <code>password_resets<\/code>, <em>middleware<\/em> de token seguro). Ao garantir a correta configura\u00e7\u00e3o do e-mail e implementar a limpeza de tokens expirados via <strong>Laravel Scheduler<\/strong>, voc\u00ea oferece um processo de recupera\u00e7\u00e3o eficiente, seguro e bem mantido para seus usu\u00e1rios.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no Laravel, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/html\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/css\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/javascript\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/sql\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/php\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Resetting Password com Laravel: A funcionalidade &#8220;Esqueci minha Senha&#8221; \u00e9 essencial para a experi\u00eancia do&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1642,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-3238","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","wpcat-18-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Resetting Password com Laravel - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Resetting Password com Laravel: Este artigo abordar\u00e1 detalhadamente como implementar o recurso de &quot;Esqueci minha senha&quot; em aplica\u00e7\u00f5es ...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resetting Password com Laravel - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Resetting Password com Laravel: Este artigo abordar\u00e1 detalhadamente como implementar o recurso de &quot;Esqueci minha senha&quot; em aplica\u00e7\u00f5es ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-20T17:23:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-10T12:56:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Resetting Password com Laravel\",\"datePublished\":\"2024-12-20T17:23:53+00:00\",\"dateModified\":\"2025-12-10T12:56:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/\"},\"wordCount\":535,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"articleSection\":[\"Laravel\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/\",\"name\":\"Resetting Password com Laravel - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"datePublished\":\"2024-12-20T17:23:53+00:00\",\"dateModified\":\"2025-12-10T12:56:07+00:00\",\"description\":\"Resetting Password com Laravel: Este artigo abordar\u00e1 detalhadamente como implementar o recurso de \\\"Esqueci minha senha\\\" em aplica\u00e7\u00f5es ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"width\":758,\"height\":426,\"caption\":\"Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/resetting-password-com-laravel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resetting Password com Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de experi\u00eancia em tecnologia, atuo como Engenheiro de Computa\u00e7\u00e3o, desenvolvedor de sistemas, escritor e produtor de conte\u00fado. Minha trajet\u00f3ria passa pelo ensino t\u00e9cnico, desenvolvimento web, arquitetura de sistemas e cria\u00e7\u00e3o de solu\u00e7\u00f5es voltadas para a ind\u00fastria de jogos digitais. Acredito que conhecimento deve ser acess\u00edvel e aplic\u00e1vel. Essa vis\u00e3o resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, intelig\u00eancia artificial, Game Design, mercado de jogos e carreiras na ind\u00fastria de games. Sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\", uma obra dedicada ao planejamento e documenta\u00e7\u00e3o de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na an\u00e1lise e valida\u00e7\u00e3o de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos vi\u00e1veis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na cria\u00e7\u00e3o de metodologias para valida\u00e7\u00e3o de produtos digitais e na produ\u00e7\u00e3o de conte\u00fado t\u00e9cnico voltado ao ecossistema de jogos. Meu compromisso \u00e9 unir teoria, pr\u00e1tica e experi\u00eancia de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da \u00e1rea.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Resetting Password com Laravel - BLOG THIAGO ROSSI","description":"Resetting Password com Laravel: Este artigo abordar\u00e1 detalhadamente como implementar o recurso de \"Esqueci minha senha\" em aplica\u00e7\u00f5es ...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/","og_locale":"pt_BR","og_type":"article","og_title":"Resetting Password com Laravel - BLOG THIAGO ROSSI","og_description":"Resetting Password com Laravel: Este artigo abordar\u00e1 detalhadamente como implementar o recurso de \"Esqueci minha senha\" em aplica\u00e7\u00f5es ...","og_url":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2024-12-20T17:23:53+00:00","article_modified_time":"2025-12-10T12:56:07+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","type":"image\/webp"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Resetting Password com Laravel","datePublished":"2024-12-20T17:23:53+00:00","dateModified":"2025-12-10T12:56:07+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/"},"wordCount":535,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","articleSection":["Laravel"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/","url":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/","name":"Resetting Password com Laravel - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","datePublished":"2024-12-20T17:23:53+00:00","dateModified":"2025-12-10T12:56:07+00:00","description":"Resetting Password com Laravel: Este artigo abordar\u00e1 detalhadamente como implementar o recurso de \"Esqueci minha senha\" em aplica\u00e7\u00f5es ...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","width":758,"height":426,"caption":"Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/resetting-password-com-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Resetting Password com Laravel"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de experi\u00eancia em tecnologia, atuo como Engenheiro de Computa\u00e7\u00e3o, desenvolvedor de sistemas, escritor e produtor de conte\u00fado. Minha trajet\u00f3ria passa pelo ensino t\u00e9cnico, desenvolvimento web, arquitetura de sistemas e cria\u00e7\u00e3o de solu\u00e7\u00f5es voltadas para a ind\u00fastria de jogos digitais. Acredito que conhecimento deve ser acess\u00edvel e aplic\u00e1vel. Essa vis\u00e3o resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, intelig\u00eancia artificial, Game Design, mercado de jogos e carreiras na ind\u00fastria de games. Sou autor do livro \"GDD \u2013 O Guia Definitivo\", uma obra dedicada ao planejamento e documenta\u00e7\u00e3o de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na an\u00e1lise e valida\u00e7\u00e3o de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos vi\u00e1veis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na cria\u00e7\u00e3o de metodologias para valida\u00e7\u00e3o de produtos digitais e na produ\u00e7\u00e3o de conte\u00fado t\u00e9cnico voltado ao ecossistema de jogos. Meu compromisso \u00e9 unir teoria, pr\u00e1tica e experi\u00eancia de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da \u00e1rea.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/3238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=3238"}],"version-history":[{"count":3,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/3238\/revisions"}],"predecessor-version":[{"id":5236,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/3238\/revisions\/5236"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/1642"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=3238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=3238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=3238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}