{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-13/",
    "result": {"data":{"markdownRemark":{"html":"<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#create-a-password-reset-form\">Create a password reset form</a></li>\n<li><a href=\"#create-a-passwordresetemail-state-slice\">Create a PasswordResetEmail state slice</a></li>\n<li><a href=\"#create-a-passwordresetpassword-state-slice\">Create a PasswordResetPassword state slice</a></li>\n<li><a href=\"#conclusion\">Conclusion</a></li>\n</ul>\n</div>\n<h6 id=\"this-blog-post-is-part-of-a-series-you-must-finish-part-1-part-2-part-3-part-4-part-5-part-6-part-7-part-8-part-9-part-10-part-11--part-12-before-continuing-here\" style=\"position:relative;\"><a href=\"#this-blog-post-is-part-of-a-series-you-must-finish-part-1-part-2-part-3-part-4-part-5-part-6-part-7-part-8-part-9-part-10-part-11--part-12-before-continuing-here\" aria-label=\"this blog post is part of a series you must finish part 1 part 2 part 3 part 4 part 5 part 6 part 7 part 8 part 9 part 10 part 11  part 12 before continuing here permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>This blog post is part of a series. You must finish <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-1/\">part-1</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-2/\">part-2</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-3/\">part-3</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-4/\">part-4</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-5/\">part-5</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-6/\">part-6</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-7/\">part-7</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-8/\">part-8</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-9/\">part-9</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-10/\">part-10</a>, <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-11/\">part-11</a> &#x26; <a href=\"https://hemanta.io/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-12/\">part-12</a> before continuing here.</h6>\n<p>When a user clicks on the link <del>I forgot my password</del> at the bottom of the login form, we direct the user to the <del>/account/password/forgot</del> route, where we show a form where the user will enter the email address for which he/she wants to recover the password.</p>\n<p>We will create this form the same way we created the registration and the login form - using Formik &#x26; Yup.</p>\n<h3 id=\"create-a-password-reset-form\" style=\"position:relative;\"><a href=\"#create-a-password-reset-form\" aria-label=\"create a password reset form permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create a password reset form</h3>\n<p>Inside the <del>components</del> folder, create a file named <del>PasswordResetFormEmail.js</del>.</p>\n<div class=\"gatsby-code-title\">client/src/components/PasswordResetFormEmail.js</div>\n<pre class=\"grvsc-container synthwave-84\" data-language=\"jsx\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">React</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react&quot;</span><span class=\"mtk1\">;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">useFormik</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;formik&quot;</span><span class=\"mtk1\">;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk5\">*</span><span class=\"mtk1\"> </span><span class=\"mtk10\">as</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;yup&quot;</span><span class=\"mtk1\">;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk6\">PasswordResetFormEmail</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useFormik</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">initialValues</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">validationSchema</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">object</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">string</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        .</span><span class=\"mtk6\">email</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Invalid email address&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        .</span><span class=\"mtk6\">required</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Please enter your email address&quot;</span><span class=\"mtk1\">),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">onSubmit</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">values</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">log</span><span class=\"mtk1\">(</span><span class=\"mtk3\">values</span><span class=\"mtk1\">));</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  });</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;passwordResetEmail-form-container&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">h1</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;font-weight-bold&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Reset Password</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">h1</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">form</span><span class=\"mtk1\"> </span><span class=\"mtk10\">onSubmit</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk7\">handleSubmit</span><span class=\"mtk10\">}</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-group col-10 col-sm-8 col-md-5 mx-auto mt-5&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">label</span><span class=\"mtk1\"> </span><span class=\"mtk10\">htmlFor</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Email Address</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">label</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">input</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-control form-control-lg&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">id</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">name</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{...</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getFieldProps</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;email&quot;</span><span class=\"mtk1\">)</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">touched</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\"> </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">small</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-text text-danger&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">small</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          ) </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">button</span><span class=\"mtk1\"> </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;submit&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;btn btn-lg btn-primary btn-block&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            Request Password Reset</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">button</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"47\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"48\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">form</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"49\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"50\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  );</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"51\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">};</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"52\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"53\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormEmail</span><span class=\"mtk1\">;</span></span></span></code></pre>\n<p>We will render the form at the <del>/account/password/forgot</del> route.</p>\n<div class=\"gatsby-code-title\">client/src/App.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"jsx\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">React</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Header</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/Header&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">Route</span><span class=\"mtk1\">, </span><span class=\"mtk3\">Switch</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react-router-dom&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">LoginForm</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/LoginForm&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">RegisterForm</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/RegisterForm&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Welcome</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/Welcome&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormEmail</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/PasswordResetFormEmail&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk6\">App</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Header</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Switch</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/account/password/forgot&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">PasswordResetFormEmail</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span><span class=\"mtk1\"> </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/register&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">RegisterForm</span><span class=\"mtk10\">}</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span><span class=\"mtk1\"> </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/login&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">LoginForm</span><span class=\"mtk10\">}</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span><span class=\"mtk1\"> </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/welcome&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">Welcome</span><span class=\"mtk10\">}</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk9\">Switch</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">App</span></span></span></code></pre>\n<p>Now, when we click on the <del>I forgot my password</del> link, we should see a form as shown below.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 552px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/63a5f898af6c5306e73642ef0d93694d/d8a93/requestPasswordReset.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 59.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABNUlEQVQoz52RwUoCURSGLzSCQl53TasBg3mMVkW1atUuCB+gh2hhRUT1AIEWLVokbdpGOqORmEjY0jShCKmMitp055w/nFGZMrH6+DkcuPc//+VcIf6CFgiEw8OhYDAYCg1pmoi4SCkjg5BS6vqoaZqGYUTHoro+Iq5d6vW6V72mH7VarVKpXLlUq1UBH+yCXyMYUEoVzguWnS2VLizLPsvn7expuXyplNOd+CPtZCJSShGR4zjKhYgGJ3uzHx6fGvfN27vG8+sbAQ6zInw43Cv+ZgbYFXx9P5HvZjsZySIvHfNKhuMnvGbxZq6ljSxv5Xjd5uV0S/E0r2a4+e6ttmMmxuIRxrcxvYOJBGb3EDvE/AEWUoilMLePyQSmkq06s4ubF3iW7rP/iej88BfBv4Oeo675E8lkM/2NsVK5AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"request password reset form\"\n        title=\"request password reset form\"\n        src=\"/static/63a5f898af6c5306e73642ef0d93694d/d8a93/requestPasswordReset.png\"\n        srcset=\"/static/63a5f898af6c5306e73642ef0d93694d/56d15/requestPasswordReset.png 200w,\n/static/63a5f898af6c5306e73642ef0d93694d/d9f49/requestPasswordReset.png 400w,\n/static/63a5f898af6c5306e73642ef0d93694d/d8a93/requestPasswordReset.png 552w\"\n        sizes=\"(max-width: 552px) 100vw, 552px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>After the user fills in his/her email address and clicks on the <del>Request Password Reset</del> button, we make a <del>POST</del> request to the <del>/account/password/forgot</del> route. Let’s configure this route.</p>\n<p>Inside the <del>routes</del> folder, create a file named <del>passwordResetRoutes.js</del>.</p>\n<div class=\"gatsby-code-title\">server/routes/passwordResetRoutes.js</div>\n<pre class=\"grvsc-container synthwave-84\" data-language=\"js\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">express</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;express&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">dotenv</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;dotenv&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">crypto</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;crypto&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">asyncHandler</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;express-async-handler&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;../models/userModel&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">sgMail</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;@sendgrid/mail&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">dotenv</span><span class=\"mtk1\">.</span><span class=\"mtk6\">config</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">sgMail</span><span class=\"mtk1\">.</span><span class=\"mtk6\">setApiKey</span><span class=\"mtk1\">(</span><span class=\"mtk3\">process</span><span class=\"mtk1\">.</span><span class=\"mtk3\">env</span><span class=\"mtk1\">.</span><span class=\"mtk7\">SENDGRID_API_KEY</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">router</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">express</span><span class=\"mtk1\">.</span><span class=\"mtk6\">Router</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">router</span><span class=\"mtk1\">.</span><span class=\"mtk6\">post</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk16\">&quot;/password/forgot&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk6\">asyncHandler</span><span class=\"mtk1\">(</span><span class=\"mtk10\">async</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">req</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">res</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">next</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\">.</span><span class=\"mtk6\">findOne</span><span class=\"mtk1\">({ </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">req</span><span class=\"mtk1\">.</span><span class=\"mtk3\">body</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\"> })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">user</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetToken</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">crypto</span><span class=\"mtk1\">.</span><span class=\"mtk6\">randomBytes</span><span class=\"mtk1\">(</span><span class=\"mtk7\">20</span><span class=\"mtk1\">).</span><span class=\"mtk6\">toString</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;hex&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetExpires</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Date</span><span class=\"mtk1\">.</span><span class=\"mtk6\">now</span><span class=\"mtk1\">() </span><span class=\"mtk10\">+</span><span class=\"mtk1\"> </span><span class=\"mtk7\">3600000</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk6\">save</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">res</span><span class=\"mtk1\">.</span><span class=\"mtk6\">json</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">message</span><span class=\"mtk14\">:</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk16\">&quot;I just sent a message to the email you provided with a link to reset your password. Please check your inbox and follow the instructions in the email.&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetUrl</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">`http://</span><span class=\"mtk8\">${</span><span class=\"mtk3\">req</span><span class=\"mtk14\">.</span><span class=\"mtk3\">headers</span><span class=\"mtk14\">.</span><span class=\"mtk7\">host</span><span class=\"mtk8\">}</span><span class=\"mtk16\">/password/reset/</span><span class=\"mtk8\">${</span><span class=\"mtk3\">user</span><span class=\"mtk14\">.</span><span class=\"mtk7\">passwordResetToken</span><span class=\"mtk8\">}</span><span class=\"mtk16\">`</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">msg</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">to</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">from</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;rawgrittt@gmail.com&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">subject</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;Reset your password&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">html</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">`&lt;h1&gt;Password Reset Instructions&lt;/h1&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;p&gt;Click on the link below to reset your password for your account.&lt;/p&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;a style=&quot;font-weight:bold; font-size: 1rem&quot; href=</span><span class=\"mtk8\">${</span><span class=\"mtk3\">passwordResetUrl</span><span class=\"mtk8\">}</span><span class=\"mtk16\">&gt;Change my password&lt;/a&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;p&gt;The link will expire in an hour.&lt;/p&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;p&gt;Hemanta Sundaray&lt;/p&gt;`</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      ;(</span><span class=\"mtk10\">async</span><span class=\"mtk1\"> () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk10\">try</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">sgMail</span><span class=\"mtk1\">.</span><span class=\"mtk6\">send</span><span class=\"mtk1\">(</span><span class=\"mtk3\">msg</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        } </span><span class=\"mtk10\">catch</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">error</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">error</span><span class=\"mtk1\">(</span><span class=\"mtk3\">error</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">error</span><span class=\"mtk1\">.</span><span class=\"mtk7\">response</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"47\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">error</span><span class=\"mtk1\">(</span><span class=\"mtk3\">error</span><span class=\"mtk1\">.</span><span class=\"mtk3\">response</span><span class=\"mtk1\">.</span><span class=\"mtk7\">body</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"48\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"49\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"50\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      })()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"51\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    } </span><span class=\"mtk10\">else</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"52\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">err</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">new</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Error</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;No account with that email exists&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"53\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">err</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk7\">404</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"54\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">next</span><span class=\"mtk1\">(</span><span class=\"mtk3\">err</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"55\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"56\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"57\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"58\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"59\"></span><span class=\"grvsc-source\"><span class=\"mtk9\">module</span><span class=\"mtk1\">.</span><span class=\"mtk9\">exports</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">router</span></span></span></code></pre>\n<p>Let’s try to understand what we are trying to do inside the route handler function.</p>\n<p>First, we check whether we have a user with the given email address. If yes, we then add two additional fields -<del>passwordResetToken</del> &#x26; <del>passwordResetExpires</del> - to the user document.</p>\n<p>We have created the <del>passwordResetToken</del> using Node’s <del>crypto</del> module. The <del>crypto.randomBytes()</del> method generates cryptographically strong pseudo-random data for a given number of bytes. We then transform the random data to a string value using the <del>toString()</del> method.</p>\n<p>We have configured the <del>passwordResetExpires</del> field in such a way that the link expires 1 hour after the user receives the password reset link.</p>\n<p>Line 29: <del>passwordResetUrl</del> is the URL we direct the user to once he/she clicks on the <del>Change my password</del> link.</p>\n<p>Line 32: This is the email address (registered with SendGrid) users will receive password reset links from.</p>\n<p>You can of course change the subject line and the html body of the email as per your requirement.</p>\n<p>Then we send the message using <del>sgMail.send()</del> method.</p>\n<blockquote>\n<p><strong>Note:</strong> We will use a third party service called SendGrid that will allow us to send emails without us having to maintain email servers. We will use SendGrid’s WebAPI to send emails from our application. We need to install the <del>@sendgrid/mail</del> package.</p>\n</blockquote>\n<p>We need to add two fields - <del>passwordResetToken</del> &#x26; <del>passwordResetExpires</del> - in the <del>User</del> model.</p>\n<div class=\"gatsby-code-title\">server/models/userModel.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"js\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">mongoose</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;mongoose&quot;</span><span class=\"mtk1\">);</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">bcrypt</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;bcryptjs&quot;</span><span class=\"mtk1\">);</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">userSchema</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">new</span><span class=\"mtk1\"> </span><span class=\"mtk9\">mongoose</span><span class=\"mtk1\">.</span><span class=\"mtk9\">Schema</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">firstName</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">type</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">String</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">required</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">true</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">lastName</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">type</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">String</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">required</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">true</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">type</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">String</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">unique</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">true</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">required</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">true</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">password</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">type</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">String</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">required</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">true</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">passwordResetToken</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">type</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">String</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">passwordResetExpires</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">type</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Date</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">});</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">userSchema</span><span class=\"mtk1\">.</span><span class=\"mtk3\">methods</span><span class=\"mtk1\">.</span><span class=\"mtk6\">matchPassword</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">async</span><span class=\"mtk1\"> </span><span class=\"mtk10\">function</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">incomingPassword</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">bcrypt</span><span class=\"mtk1\">.</span><span class=\"mtk6\">compare</span><span class=\"mtk1\">(</span><span class=\"mtk3\">incomingPassword</span><span class=\"mtk1\">, </span><span class=\"mtk9 mtkb\">this</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\">);</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">};</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">userSchema</span><span class=\"mtk1\">.</span><span class=\"mtk6\">pre</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;save&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk10\">async</span><span class=\"mtk1\"> </span><span class=\"mtk10\">function</span><span class=\"mtk1\"> () {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">salt</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">bcrypt</span><span class=\"mtk1\">.</span><span class=\"mtk6\">genSalt</span><span class=\"mtk1\">(</span><span class=\"mtk7\">10</span><span class=\"mtk1\">);</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk9 mtkb\">this</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">bcrypt</span><span class=\"mtk1\">.</span><span class=\"mtk6\">hash</span><span class=\"mtk1\">(</span><span class=\"mtk9 mtkb\">this</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\">, </span><span class=\"mtk3\">salt</span><span class=\"mtk1\">);</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">});</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">mongoose</span><span class=\"mtk1\">.</span><span class=\"mtk6\">model</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;User&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk3\">userSchema</span><span class=\"mtk1\">);</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk9\">module</span><span class=\"mtk1\">.</span><span class=\"mtk9\">exports</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\">;</span></span></span></code></pre>\n<p>Then we require the <del>passwordResetRoutes.js</del> module in <del>index.js</del> and add the router in the middleware handling chain.</p>\n<div class=\"gatsby-code-title\">server/index.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"js\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">express</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;express&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">dotenv</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;dotenv&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">globalErrorHandler</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;./middleware/errorMiddleware&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">userRoutes</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;./routes/userRoutes&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetRoutes</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;./routes/passwordResetRoutes&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">connectDB</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;./config/db&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">dotenv</span><span class=\"mtk1\">.</span><span class=\"mtk6\">config</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk6\">connectDB</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">app</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">express</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">app</span><span class=\"mtk1\">.</span><span class=\"mtk6\">use</span><span class=\"mtk1\">(</span><span class=\"mtk3\">express</span><span class=\"mtk1\">.</span><span class=\"mtk6\">json</span><span class=\"mtk1\">())</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">app</span><span class=\"mtk1\">.</span><span class=\"mtk6\">use</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;/api/users&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk3\">userRoutes</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">app</span><span class=\"mtk1\">.</span><span class=\"mtk6\">use</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;/account&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk3\">passwordResetRoutes</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">app</span><span class=\"mtk1\">.</span><span class=\"mtk6\">use</span><span class=\"mtk1\">(</span><span class=\"mtk3\">globalErrorHandler</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PORT</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">process</span><span class=\"mtk1\">.</span><span class=\"mtk3\">env</span><span class=\"mtk1\">.</span><span class=\"mtk7\">PORT</span><span class=\"mtk1\"> </span><span class=\"mtk10\">||</span><span class=\"mtk1\"> </span><span class=\"mtk7\">5000</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">app</span><span class=\"mtk1\">.</span><span class=\"mtk6\">listen</span><span class=\"mtk1\">(</span><span class=\"mtk3\">PORT</span><span class=\"mtk1\">, () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">log</span><span class=\"mtk1\">(</span><span class=\"mtk16\">`Server listening on port </span><span class=\"mtk8\">${</span><span class=\"mtk3\">PORT</span><span class=\"mtk8\">}</span><span class=\"mtk16\">`</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">})</span></span></span></code></pre>\n<p>We also need to install the <del>@sendgrid/mail</del> package and add the sendgrid API key in the <del>.env</del> file.</p>\n<pre class=\"grvsc-container synthwave-84\" data-language=\"sh\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-source\"><span class=\"mtk1\">PS C:</span><span class=\"mtk6\">\\U</span><span class=\"mtk1\">sers</span><span class=\"mtk6\">\\D</span><span class=\"mtk1\">elhivery</span><span class=\"mtk6\">\\D</span><span class=\"mtk1\">esktop</span><span class=\"mtk6\">\\m</span><span class=\"mtk1\">ern-auth</span><span class=\"mtk10\">&gt;</span><span class=\"mtk1\"> npm i @sendgrid/mail</span></span></span></code></pre>\n<div class=\"gatsby-code-title\">mern-auth/.env</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"sh\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">PORT=5000</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">MONGO_URI=mongodb+srv://sundaray:</span><span class=\"mtk10\">&lt;</span><span class=\"mtk1\">password</span><span class=\"mtk10\">&gt;</span><span class=\"mtk1\">@sandbox.y8blv.mongodb.net/myFirstDatabase</span><span class=\"mtk10\">?</span><span class=\"mtk1\">retryWrites=true</span><span class=\"mtk10\">&amp;</span><span class=\"mtk1\">w=majority</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">JWT_SECRET=terces@1234</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">SENDGRID_API_KEY=</span><span class=\"mtk10\">&lt;</span><span class=\"mtk1\">your-sendgrid-api-key</span><span class=\"mtk10\">&gt;</span></span></span></code></pre>\n<blockquote>\n<p><strong>Note:</strong> You need to create an account on <strong><a href=\"http://www.sendgrid.com\">www.sendgrid.com</a></strong> and get the SendGrid API key. We need a SendGrid API key, so that SendGrid can recognize our application when we send a request to SendGrid’s API.</p>\n</blockquote>\n<h3 id=\"create-a-passwordresetemail-state-slice\" style=\"position:relative;\"><a href=\"#create-a-passwordresetemail-state-slice\" aria-label=\"create a passwordresetemail state slice permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create a PasswordResetEmail state slice</h3>\n<p>Inside the <del>stateSlices</del> folder, create a file named <del>passwordResetEmailSlice.js</del>.</p>\n<div class=\"gatsby-code-title\">client/src/components/stateSlices/passwordResetEmailSlice.js</div>\n<pre class=\"grvsc-container synthwave-84\" data-language=\"js\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">createSlice</span><span class=\"mtk1\">, </span><span class=\"mtk3\">createAsyncThunk</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;@reduxjs/toolkit&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">axios</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;axios&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">initialState</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">status</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;idle&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">emailSentSuccess</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">error</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">sendPasswordResetEmail</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">createAsyncThunk</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk16\">&quot;passwordReset/sendPasswordResetEmail&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">async</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">passwordResetEmail</span><span class=\"mtk1\">, { </span><span class=\"mtk3 mtki\">rejectWithValue</span><span class=\"mtk1\"> }) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">try</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">data</span><span class=\"mtk1\"> } </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">axios</span><span class=\"mtk1\">.</span><span class=\"mtk6\">post</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk16\">&quot;/account/password/forgot&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">passwordResetEmail</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> </span><span class=\"mtk3\">data</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    } </span><span class=\"mtk10\">catch</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">err</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> </span><span class=\"mtk6\">rejectWithValue</span><span class=\"mtk1\">(</span><span class=\"mtk3\">err</span><span class=\"mtk1\">.</span><span class=\"mtk3\">response</span><span class=\"mtk1\">.</span><span class=\"mtk7\">data</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetSlice</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">createSlice</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">name</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;passwordReset&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">initialState</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">reducers</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {},</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">extraReducers</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">[sendPasswordResetEmail.</span><span class=\"mtk7\">pending</span><span class=\"mtk3\">]</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">action</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;loading&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">[sendPasswordResetEmail.</span><span class=\"mtk7\">fulfilled</span><span class=\"mtk3\">]</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">action</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;succeeded&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">emailSentSuccess</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">action</span><span class=\"mtk1\">.</span><span class=\"mtk7\">payload</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">error</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">[sendPasswordResetEmail.</span><span class=\"mtk7\">rejected</span><span class=\"mtk3\">]</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">action</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;failed&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">error</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">action</span><span class=\"mtk1\">.</span><span class=\"mtk3\">payload</span><span class=\"mtk1\">.</span><span class=\"mtk7\">message</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">emailSentSuccess</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">})</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetSlice</span><span class=\"mtk1\">.</span><span class=\"mtk7\">reducer</span></span></span></code></pre>\n<p>Add the reducer to the store.</p>\n<div class=\"gatsby-code-title\">client/src/store.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"js\" data-index=\"8\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">configureStore</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;@reduxjs/toolkit&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">registerReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/registerSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loginReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/loginSlice&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetEmailReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/passwordResetEmailSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loggedInUserFromStorage</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">localStorage</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getItem</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;loggedInUser&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> </span><span class=\"mtk9\">JSON</span><span class=\"mtk1\">.</span><span class=\"mtk6\">parse</span><span class=\"mtk1\">(</span><span class=\"mtk3\">localStorage</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getItem</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;loggedInUser&quot;</span><span class=\"mtk1\">))</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">preloadedState</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">login</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">loggedInUser</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loggedInUserFromStorage</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk6\">configureStore</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">reducer</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">register</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">registerReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">login</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loginReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">passwordResetEmail</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetEmailReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">preloadedState</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">})</span></span></span></code></pre>\n<p>We will update the <del>passwordResetFormEmail.js</del> file, so that we can dispatch actions and interact with the global Redux store.</p>\n<div class=\"gatsby-code-title\">client/src/components/PasswordResetFormEmail.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"jsx\" data-index=\"9\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">React</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">useFormik</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;formik&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk5\">*</span><span class=\"mtk1\"> </span><span class=\"mtk10\">as</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;yup&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">useSelector</span><span class=\"mtk1\">, </span><span class=\"mtk3\">useDispatch</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react-redux&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">sendPasswordResetEmail</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./stateSlices/passwordResetEmailSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk6\">PasswordResetFormEmail</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">status</span><span class=\"mtk1\">, </span><span class=\"mtk3\">emailSentSuccess</span><span class=\"mtk1\">, </span><span class=\"mtk3\">error</span><span class=\"mtk1\"> } </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useSelector</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\"> </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetEmail</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">dispatch</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useDispatch</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useFormik</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">initialValues</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">validationSchema</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">object</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">string</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        .</span><span class=\"mtk6\">email</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Invalid email address&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        .</span><span class=\"mtk6\">required</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Please enter your email address&quot;</span><span class=\"mtk1\">),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">onSubmit</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3 mtki\">values</span><span class=\"mtk1\"> </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">dispatch</span><span class=\"mtk1\">(</span><span class=\"mtk6\">sendPasswordResetEmail</span><span class=\"mtk1\">(</span><span class=\"mtk3\">values</span><span class=\"mtk1\">))</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;passwordResetEmail-form-container&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">h1</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;font-weight-bold&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Reset Password</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">h1</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">form</span><span class=\"mtk1\"> </span><span class=\"mtk10\">onSubmit</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk7\">handleSubmit</span><span class=\"mtk10\">}</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-group col-10 col-sm-8 col-md-5 mx-auto mt-5&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">{</span><span class=\"mtk3\">emailSentSuccess</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;alert alert-success password-reset-email&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">role</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;alert&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">{</span><span class=\"mtk3\">emailSentSuccess</span><span class=\"mtk1\">.</span><span class=\"mtk7\">message</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          )</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">{</span><span class=\"mtk3\">error</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;alert alert-danger&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">role</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;alert&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">{</span><span class=\"mtk3\">error</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"47\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          )</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"48\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"49\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">label</span><span class=\"mtk1\"> </span><span class=\"mtk10\">htmlFor</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Email Address</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">label</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"50\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">input</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"51\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-control form-control-lg&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"52\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">id</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"53\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">name</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"54\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;email&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"55\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{...</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getFieldProps</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;email&quot;</span><span class=\"mtk1\">)</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"56\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"57\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">touched</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\"> </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"58\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">small</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-text text-danger&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"59\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"60\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">small</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"61\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          ) </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"62\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"63\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"64\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"65\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">button</span><span class=\"mtk1\"> </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;submit&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;btn btn-lg btn-primary btn-block&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"66\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{</span><span class=\"mtk3\">status</span><span class=\"mtk1\"> </span><span class=\"mtk10\">===</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;loading&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"67\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;spinner-border text-light&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">role</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;status&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"68\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">                </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">span</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;sr-only&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Loading...</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">span</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"69\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"70\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            ) </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk10\">}{</span><span class=\"mtk16\">&quot; &quot;</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"71\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            Request Password Reset</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"72\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">button</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"73\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"74\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">form</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"75\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"76\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"77\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"78\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"79\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormEmail</span></span></span></code></pre>\n<p>When the user enters the email address for which he/she wants to reset the password and clicks on the <del>Request Password Reset</del> button, The user receives a message in his/her email address with a link to reset the password.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 492px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/113b3f5a22309bfac70d7373b8f009ec/f5a47/passwordResetEmail.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 73.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABtElEQVQoz52SwY7aMBCGec4+QF+gD9I+RS+99N4LCCIIqHCotioosCRAyQbsONgTZ2yPswrZUqpdtlU/jWzLo18z89uduq6JSAghpdRal2WJVaXOAEBZasuGevPJFt8UVFKeiKj+Raeua+fcdrtdLldpmibJJssOURSt1+s4iR+yg1q8Twdvyvjjbs82SWyM+S2GgjlnvffOOWOMtdYY45xr0943cYvOh7fvoq/TXbq/u/s+ny+iaLlp2HLOGWN5ngMo76n25M/8Ib7/8rl82KF1iHid8K9UvJ7Zew8AROScs9YiIgAgIhEhojEGEdv764lasTfG9Pv98XgchmEQBGEY9nq9brc7mUym02kQBMPhcDQaBUEwGAxms9nF8E67WWsVgFRKStW8lrFQlgBgjNFaV2faFhDxMtFT24VgoIqT4IVggh/L85nzxrAsyxhj1tqXZ3bkV2k13+n7FOMMo5/Vj41epWhs4zAR3TKvEZP3caoWSbHcyfVeRtsm4lRZR393u/YeZCGL/CS4yJmS4tw/vzb2dmWiPM8P2YFzfjwe81zU/8aT24iotb6szz/Ta+L/4xFumF0HjwiadAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"password reset request email link\"\n        title=\"password reset request email link\"\n        src=\"/static/113b3f5a22309bfac70d7373b8f009ec/f5a47/passwordResetEmail.png\"\n        srcset=\"/static/113b3f5a22309bfac70d7373b8f009ec/56d15/passwordResetEmail.png 200w,\n/static/113b3f5a22309bfac70d7373b8f009ec/d9f49/passwordResetEmail.png 400w,\n/static/113b3f5a22309bfac70d7373b8f009ec/f5a47/passwordResetEmail.png 492w\"\n        sizes=\"(max-width: 492px) 100vw, 492px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>When the user clicks on the <del>Change my password</del> link, we show a form where the user enters his/her new password as shown below.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 669px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/c1ef519f985e4da50d6bcf9c98eee565/66b6b/passwordReset.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 54.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAA/UlEQVQoz6VQzUrDQBjcQ26bh9GrhtqTV8E32BLiQ/Qx6sFW8aQvUQTFFryolNTGUEqa/kRtPErxkN1vZA3GtdhC6TAsH7M73yzD2Jrg3LZtzjm3LItVDAghKishhPA87+gbrusybACmlJJSAngOw8dOpxcEvt/tPvXCfj/LpFoJnUxEAN5m78NxMnmZRaPJ9DX9mH9mCpryDxUZycYvyDgLZZF50q85X1Zt0naNSg1y6rRzQvvndHiJgwuUz7Bbh9PA3im2jnE10I8l/ZjzXUGKmwjtGK0Yt0PcjfGQ4D5Be6SVVqyvriOkcxSWzdouJpnXY1Cqf0RaUtjayV9JSRicdDvAGwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"password reset form\"\n        title=\"password reset form\"\n        src=\"/static/c1ef519f985e4da50d6bcf9c98eee565/66b6b/passwordReset.png\"\n        srcset=\"/static/c1ef519f985e4da50d6bcf9c98eee565/56d15/passwordReset.png 200w,\n/static/c1ef519f985e4da50d6bcf9c98eee565/d9f49/passwordReset.png 400w,\n/static/c1ef519f985e4da50d6bcf9c98eee565/66b6b/passwordReset.png 669w\"\n        sizes=\"(max-width: 669px) 100vw, 669px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Let’s create this form.</p>\n<p>Inside the <del>components</del> folder, create a file named <del>PasswordResetFormPassword.js</del>.</p>\n<div class=\"gatsby-code-title\">client/src/components/PasswordResetFormPassword.js</div>\n<pre class=\"grvsc-container synthwave-84\" data-language=\"jsx\" data-index=\"10\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">React</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">useFormik</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;formik&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk5\">*</span><span class=\"mtk1\"> </span><span class=\"mtk10\">as</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;yup&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk6\">PasswordResetFormPassword</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> ({ </span><span class=\"mtk3 mtki\">history</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">match</span><span class=\"mtk1\"> }) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useFormik</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">initialValues</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">password</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">validationSchema</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">object</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">password</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">string</span><span class=\"mtk1\">().</span><span class=\"mtk6\">required</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Please enter your password&quot;</span><span class=\"mtk1\">),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">onSubmit</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3 mtki\">values</span><span class=\"mtk1\"> </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">log</span><span class=\"mtk1\">(</span><span class=\"mtk3\">values</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;passwordResetPassword-form-container&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">h1</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;font-weight-bold&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Reset Password</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">h1</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">form</span><span class=\"mtk1\"> </span><span class=\"mtk10\">onSubmit</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk7\">handleSubmit</span><span class=\"mtk10\">}</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-group col-10 col-sm-8 col-md-5 mx-auto mt-5&quot;</span><span class=\"mtk6\">&gt;&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-group col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">label</span><span class=\"mtk1\"> </span><span class=\"mtk10\">htmlFor</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Enter a new password:</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">label</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">input</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-control form-control-lg&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">id</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">name</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{...</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getFieldProps</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;email&quot;</span><span class=\"mtk1\">)</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">touched</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\"> </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">small</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-text text-danger&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">small</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          ) </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">button</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;submit&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;btn btn-lg btn-primary btn-block login-button&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            Reset Password</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"47\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">button</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"48\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"49\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">form</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"50\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"51\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"52\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"53\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"54\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormPassword</span></span></span></code></pre>\n<p>We will show the form at the <del>/password/reset/:token</del> route.</p>\n<div class=\"gatsby-code-title\">client/src/App.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"jsx\" data-index=\"11\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">React</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Header</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/Header&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">Route</span><span class=\"mtk1\">, </span><span class=\"mtk3\">Switch</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react-router-dom&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">LoginForm</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/LoginForm&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">RegisterForm</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/RegisterForm&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Welcome</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/Welcome&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormEmail</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/PasswordResetFormEmail&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormPassword</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/PasswordResetFormPassword&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk6\">App</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Header</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Switch</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password/reset/:token&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">PasswordResetFormPassword</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/account/password/forgot&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">PasswordResetFormEmail</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span><span class=\"mtk1\"> </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/register&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">RegisterForm</span><span class=\"mtk10\">}</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span><span class=\"mtk1\"> </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/login&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">LoginForm</span><span class=\"mtk10\">}</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk9\">Route</span><span class=\"mtk1\"> </span><span class=\"mtk10\">path</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;/welcome&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">component</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">Welcome</span><span class=\"mtk10\">}</span><span class=\"mtk1\"> </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk9\">Switch</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">App</span></span></span></code></pre>\n<p>After the user enters a new password and clicks on the <del>Reset Password</del> button, we send a <del>POST</del> request to the <del>/account/password/reset/:token</del> endpoint.</p>\n<p>We will configure this endpoint in the <del>passwordResetRoutes.js</del> file.</p>\n<div class=\"gatsby-code-title\">server/routes/passwordResetRoutes.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"js\" data-index=\"12\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">express</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;express&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">crypto</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;crypto&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">dotenv</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;dotenv&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">asyncHandler</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;express-async-handler&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;../models/userModel&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">sgMail</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">require</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;@sendgrid/mail&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">dotenv</span><span class=\"mtk1\">.</span><span class=\"mtk6\">config</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">sgMail</span><span class=\"mtk1\">.</span><span class=\"mtk6\">setApiKey</span><span class=\"mtk1\">(</span><span class=\"mtk3\">process</span><span class=\"mtk1\">.</span><span class=\"mtk3\">env</span><span class=\"mtk1\">.</span><span class=\"mtk7\">SENDGRID_API_KEY</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">router</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">express</span><span class=\"mtk1\">.</span><span class=\"mtk6\">Router</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">router</span><span class=\"mtk1\">.</span><span class=\"mtk6\">post</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk16\">&quot;/password/forgot&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk6\">asyncHandler</span><span class=\"mtk1\">(</span><span class=\"mtk10\">async</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">req</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">res</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">next</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\">.</span><span class=\"mtk6\">findOne</span><span class=\"mtk1\">({ </span><span class=\"mtk3\">email</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">req</span><span class=\"mtk1\">.</span><span class=\"mtk3\">body</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\"> })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">user</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetToken</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">crypto</span><span class=\"mtk1\">.</span><span class=\"mtk6\">randomBytes</span><span class=\"mtk1\">(</span><span class=\"mtk7\">20</span><span class=\"mtk1\">).</span><span class=\"mtk6\">toString</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;hex&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetExpires</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Date</span><span class=\"mtk1\">.</span><span class=\"mtk6\">now</span><span class=\"mtk1\">() </span><span class=\"mtk10\">+</span><span class=\"mtk1\"> </span><span class=\"mtk7\">3600000</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk6\">save</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">res</span><span class=\"mtk1\">.</span><span class=\"mtk6\">json</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">message</span><span class=\"mtk14\">:</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk16\">&quot;I just sent a message to the email you provided with a link to reset your password. Please check your inbox and follow the instructions in the email.&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetUrl</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">`http://</span><span class=\"mtk8\">${</span><span class=\"mtk3\">req</span><span class=\"mtk14\">.</span><span class=\"mtk3\">headers</span><span class=\"mtk14\">.</span><span class=\"mtk7\">host</span><span class=\"mtk8\">}</span><span class=\"mtk16\">/password/reset/</span><span class=\"mtk8\">${</span><span class=\"mtk3\">user</span><span class=\"mtk14\">.</span><span class=\"mtk7\">passwordResetToken</span><span class=\"mtk8\">}</span><span class=\"mtk16\">`</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">msg</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">to</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">email</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">from</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;rawgrittt@gmail.com&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">subject</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;Reset your password&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">html</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">`&lt;h1&gt;Password Reset Instructions&lt;/h1&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;p&gt;Click on the link below to reset your password for your account.&lt;/p&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;a style=&quot;font-weight:bold; font-size: 1rem&quot; href=</span><span class=\"mtk8\">${</span><span class=\"mtk3\">passwordResetUrl</span><span class=\"mtk8\">}</span><span class=\"mtk16\">&gt;Change my password&lt;/a&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;p&gt;The link will expire in an hour.&lt;/p&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk16\">        &lt;p&gt;Hemanta Sundaray&lt;/p&gt;`</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      ;(</span><span class=\"mtk10\">async</span><span class=\"mtk1\"> () </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk10\">try</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">sgMail</span><span class=\"mtk1\">.</span><span class=\"mtk6\">send</span><span class=\"mtk1\">(</span><span class=\"mtk3\">msg</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        } </span><span class=\"mtk10\">catch</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">error</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">error</span><span class=\"mtk1\">(</span><span class=\"mtk3\">error</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">error</span><span class=\"mtk1\">.</span><span class=\"mtk7\">response</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"47\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk9\">console</span><span class=\"mtk1\">.</span><span class=\"mtk6\">error</span><span class=\"mtk1\">(</span><span class=\"mtk3\">error</span><span class=\"mtk1\">.</span><span class=\"mtk3\">response</span><span class=\"mtk1\">.</span><span class=\"mtk7\">body</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"48\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"49\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"50\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      })()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"51\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    } </span><span class=\"mtk10\">else</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"52\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">err</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">new</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Error</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;No account with that email exists&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"53\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">err</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk7\">404</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"54\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">next</span><span class=\"mtk1\">(</span><span class=\"mtk3\">err</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"55\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"56\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"57\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"58\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"59\"></span><span class=\"grvsc-source\"><span class=\"mtk3\">router</span><span class=\"mtk1\">.</span><span class=\"mtk6\">post</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"60\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk16\">&quot;/password/reset/:token&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"61\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk6\">asyncHandler</span><span class=\"mtk1\">(</span><span class=\"mtk10\">async</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">req</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">res</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">next</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"62\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">User</span><span class=\"mtk1\">.</span><span class=\"mtk6\">findOne</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"63\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">passwordResetToken</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">req</span><span class=\"mtk1\">.</span><span class=\"mtk3\">params</span><span class=\"mtk1\">.</span><span class=\"mtk7\">token</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"64\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">passwordResetExpires</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">$gt</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Date</span><span class=\"mtk1\">.</span><span class=\"mtk6\">now</span><span class=\"mtk1\">() },</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"65\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    })</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"66\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"67\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">user</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"68\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">req</span><span class=\"mtk1\">.</span><span class=\"mtk3\">body</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"69\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetToken</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk5\">undefined</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"70\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetExpires</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk5\">undefined</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"71\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">updatedUser</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">user</span><span class=\"mtk1\">.</span><span class=\"mtk6\">save</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"72\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">res</span><span class=\"mtk1\">.</span><span class=\"mtk6\">json</span><span class=\"mtk1\">(</span><span class=\"mtk3\">updatedUser</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"73\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    } </span><span class=\"mtk10\">else</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"74\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">err</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">new</span><span class=\"mtk1\"> </span><span class=\"mtk9\">Error</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Password reset token is invalid or has expired&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"75\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">err</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk7\">404</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"76\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">next</span><span class=\"mtk1\">(</span><span class=\"mtk3\">err</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"77\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"78\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  })</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"79\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"80\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"81\"></span><span class=\"grvsc-source\"><span class=\"mtk9\">module</span><span class=\"mtk1\">.</span><span class=\"mtk9\">exports</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">router</span></span></span></code></pre>\n<p>In the route handler function, we check whether we have a user wherein the value of the <del>passwordResetToken</del> field matches the token in the <del>passwordResetUrl</del> and the value of the <del>passwordResetExpires</del> field is within 1 hour of the user receiving the password reset link.</p>\n<p>Once we complete the check for token validity and token expiry, we update the user’s password with the new password and remove the two fields - <del>passwordResetToken</del>(line 69) and <del>passwordResetExpires</del>(line 70) - from the user document. Otherwise, we send an error message to the client.</p>\n<h3 id=\"create-a-passwordresetpassword-state-slice\" style=\"position:relative;\"><a href=\"#create-a-passwordresetpassword-state-slice\" aria-label=\"create a passwordresetpassword state slice permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create a PasswordResetPassword state slice</h3>\n<p>Inside the <del>stateSlices</del> folder, create a file named <del>passwordResetPasswordSlice.js</del>.</p>\n<div class=\"gatsby-code-title\">client/components/stateSlices/passwordResetPasswordSlice.js</div>\n<pre class=\"grvsc-container synthwave-84\" data-language=\"jsx\" data-index=\"13\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">createSlice</span><span class=\"mtk1\">, </span><span class=\"mtk3\">createAsyncThunk</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;@reduxjs/toolkit&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">axios</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;axios&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">initialState</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">status</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;idle&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">passwordReset</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">error</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">sendNewPassword</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">createAsyncThunk</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk16\">&quot;passwordReset/sendNewPassword&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">async</span><span class=\"mtk1\"> ({ </span><span class=\"mtk3 mtki\">password</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">token</span><span class=\"mtk1\"> }, { </span><span class=\"mtk3 mtki\">rejectWithValue</span><span class=\"mtk1\"> }) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk10\">try</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">data</span><span class=\"mtk1\"> } </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk10\">await</span><span class=\"mtk1\"> </span><span class=\"mtk3\">axios</span><span class=\"mtk1\">.</span><span class=\"mtk6\">post</span><span class=\"mtk1\">(</span><span class=\"mtk16\">`/account/password/reset/</span><span class=\"mtk8\">${</span><span class=\"mtk3\">token</span><span class=\"mtk8\">}</span><span class=\"mtk16\">`</span><span class=\"mtk1\">, {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk3\">password</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> </span><span class=\"mtk3\">data</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    } </span><span class=\"mtk10\">catch</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">err</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> </span><span class=\"mtk6\">rejectWithValue</span><span class=\"mtk1\">(</span><span class=\"mtk3\">err</span><span class=\"mtk1\">.</span><span class=\"mtk3\">response</span><span class=\"mtk1\">.</span><span class=\"mtk7\">data</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetSlice</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">createSlice</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">name</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;passwordReset&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">initialState</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">reducers</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {},</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">extraReducers</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">[sendNewPassword.</span><span class=\"mtk7\">pending</span><span class=\"mtk3\">]</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">action</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;loading&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">[sendNewPassword.</span><span class=\"mtk7\">fulfilled</span><span class=\"mtk3\">]</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">action</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;succeeded&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordReset</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk5\">true</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">[sendNewPassword.</span><span class=\"mtk7\">rejected</span><span class=\"mtk3\">]</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> (</span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">action</span><span class=\"mtk1\">) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">status</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;failed&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">error</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">action</span><span class=\"mtk1\">.</span><span class=\"mtk3\">payload</span><span class=\"mtk1\">.</span><span class=\"mtk7\">message</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">})</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetSlice</span><span class=\"mtk1\">.</span><span class=\"mtk7\">reducer</span></span></span></code></pre>\n<p>We then add the reducer to the store.</p>\n<div class=\"gatsby-code-title\">client/src/store.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"jsx\" data-index=\"14\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">configureStore</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;@reduxjs/toolkit&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">registerReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/registerSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loginReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/loginSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetEmailReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/passwordResetEmailSlice&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetPasswordReducer</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./components/stateSlices/passwordResetPasswordSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loggedInUserFromStorage</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">localStorage</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getItem</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;loggedInUser&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> </span><span class=\"mtk9\">JSON</span><span class=\"mtk1\">.</span><span class=\"mtk6\">parse</span><span class=\"mtk1\">(</span><span class=\"mtk3\">localStorage</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getItem</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;loggedInUser&quot;</span><span class=\"mtk1\">))</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">preloadedState</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">login</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">loggedInUser</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loggedInUserFromStorage</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk6\">configureStore</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">reducer</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">register</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">registerReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">login</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">loginReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">passwordResetEmail</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetEmailReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">passwordResetPassword</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">passwordResetPasswordReducer</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk3\">preloadedState</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">})</span></span></span></code></pre>\n<p>We will update the <del>passwordResetFormPassword.js</del> file, so that we can dispatch actions and interact with the global Redux store.</p>\n<div class=\"gatsby-code-title\">client/src/components/PasswordResetFormPassword.js</div>\n<pre class=\"grvsc-container grvsc-has-line-highlighting synthwave-84\" data-language=\"jsx\" data-index=\"15\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"1\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk3\">React</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"2\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">useFormik</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;formik&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"3\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> </span><span class=\"mtk5\">*</span><span class=\"mtk1\"> </span><span class=\"mtk10\">as</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\"> </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;yup&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"4\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">useSelector</span><span class=\"mtk1\">, </span><span class=\"mtk3\">useDispatch</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;react-redux&quot;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"5\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">sendNewPassword</span><span class=\"mtk1\"> } </span><span class=\"mtk10\">from</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;./stateSlices/passwordResetPasswordSlice&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"6\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"7\"></span><span class=\"grvsc-source\"><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk6\">PasswordResetFormPassword</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> ({ </span><span class=\"mtk3 mtki\">history</span><span class=\"mtk1\">, </span><span class=\"mtk3 mtki\">match</span><span class=\"mtk1\"> }) </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"8\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">status</span><span class=\"mtk1\">, </span><span class=\"mtk3\">passwordReset</span><span class=\"mtk1\">, </span><span class=\"mtk3\">error</span><span class=\"mtk1\"> } </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useSelector</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"9\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3 mtki\">state</span><span class=\"mtk1\"> </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk3\">state</span><span class=\"mtk1\">.</span><span class=\"mtk7\">passwordResetPassword</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"10\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"11\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"12\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">dispatch</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useDispatch</span><span class=\"mtk1\">()</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"13\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"14\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\"> </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk6\">useFormik</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"15\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">initialValues</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"16\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">password</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;&quot;</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"17\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"18\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">validationSchema</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">object</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"19\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk3\">password</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">Yup</span><span class=\"mtk1\">.</span><span class=\"mtk6\">string</span><span class=\"mtk1\">().</span><span class=\"mtk6\">required</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;Please enter your password&quot;</span><span class=\"mtk1\">),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"20\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    }),</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"21\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">onSubmit</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3 mtki\">values</span><span class=\"mtk1\"> </span><span class=\"mtk10\">=&gt;</span><span class=\"mtk1\"> {</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"22\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk10\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk3\">password</span><span class=\"mtk1\"> } </span><span class=\"mtk12\">=</span><span class=\"mtk1\"> </span><span class=\"mtk3\">values</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"23\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">dispatch</span><span class=\"mtk1\">(</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"24\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">sendNewPassword</span><span class=\"mtk1\">({</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"25\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk3\">password</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"26\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk3\">token</span><span class=\"mtk14\">:</span><span class=\"mtk1\"> </span><span class=\"mtk3\">match</span><span class=\"mtk1\">.</span><span class=\"mtk3\">params</span><span class=\"mtk1\">.</span><span class=\"mtk7\">token</span><span class=\"mtk1\">,</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"27\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        })</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"28\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"29\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    },</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"30\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  })</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"31\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"32\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk3\">passwordReset</span><span class=\"mtk1\">) {</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"33\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk3\">history</span><span class=\"mtk1\">.</span><span class=\"mtk6\">push</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;/login&quot;</span><span class=\"mtk1\">)</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"34\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  }</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"35\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"36\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  </span><span class=\"mtk10\">return</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"37\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;passwordResetPassword-form-container&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"38\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"39\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">h1</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;font-weight-bold&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Reset Password</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">h1</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"40\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"41\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">form</span><span class=\"mtk1\"> </span><span class=\"mtk10\">onSubmit</span><span class=\"mtk12\">=</span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk7\">handleSubmit</span><span class=\"mtk10\">}</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"42\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk10\">{</span><span class=\"mtk3\">error</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"43\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;alert alert-danger&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">role</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;alert&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"44\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{</span><span class=\"mtk3\">error</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"45\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"46\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        )</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"47\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"48\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-group col-10 col-sm-8 col-md-5 mx-auto mt-5&quot;</span><span class=\"mtk6\">&gt;&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"49\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-group col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"50\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">label</span><span class=\"mtk1\"> </span><span class=\"mtk10\">htmlFor</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Enter a new password:</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">label</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"51\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">input</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"52\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-control form-control-lg&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"53\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">id</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"54\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">name</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"55\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;password&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"56\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{...</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk6\">getFieldProps</span><span class=\"mtk1\">(</span><span class=\"mtk16\">&quot;email&quot;</span><span class=\"mtk1\">)</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"57\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">/&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"58\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">touched</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\"> </span><span class=\"mtk10\">&amp;&amp;</span><span class=\"mtk1\"> </span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk1\"> </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"59\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">small</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;form-text text-danger&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"60\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk10\">{</span><span class=\"mtk3\">formik</span><span class=\"mtk1\">.</span><span class=\"mtk3\">errors</span><span class=\"mtk1\">.</span><span class=\"mtk7\">password</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"61\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">small</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"62\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          ) </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"63\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"64\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"65\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;col-10 col-sm-8 col-md-5 mx-auto&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"66\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">button</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"67\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">type</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;submit&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"68\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;btn btn-lg btn-primary btn-block login-button&quot;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"69\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"70\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            </span><span class=\"mtk10\">{</span><span class=\"mtk3\">status</span><span class=\"mtk1\"> </span><span class=\"mtk10\">===</span><span class=\"mtk1\"> </span><span class=\"mtk16\">&quot;loading&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">?</span><span class=\"mtk1\"> (</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"71\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">div</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;spinner-border text-light&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk10\">role</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;status&quot;</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"72\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">                </span><span class=\"mtk6\">&lt;</span><span class=\"mtk8\">span</span><span class=\"mtk1\"> </span><span class=\"mtk10\">className</span><span class=\"mtk12\">=</span><span class=\"mtk16\">&quot;sr-only&quot;</span><span class=\"mtk6\">&gt;</span><span class=\"mtk1\">Loading...</span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">span</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"73\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">              </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line grvsc-line-highlighted\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"74\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            ) </span><span class=\"mtk10\">:</span><span class=\"mtk1\"> </span><span class=\"mtk5\">null</span><span class=\"mtk10\">}{</span><span class=\"mtk16\">&quot; &quot;</span><span class=\"mtk10\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"75\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">            Reset Password</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"76\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">          </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">button</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"77\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">        </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"78\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">      </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">form</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"79\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">    </span><span class=\"mtk6\">&lt;/</span><span class=\"mtk8\">div</span><span class=\"mtk6\">&gt;</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"80\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">  )</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"81\"></span><span class=\"grvsc-source\"><span class=\"mtk1\">}</span></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"82\"></span><span class=\"grvsc-source\"></span></span>\n<span class=\"grvsc-line\"><span class=\"grvsc-gutter-pad\"></span><span class=\"grvsc-gutter grvsc-line-number\" aria-hidden=\"true\" data-content=\"83\"></span><span class=\"grvsc-source\"><span class=\"mtk8\">export</span><span class=\"mtk1\"> </span><span class=\"mtk10\">default</span><span class=\"mtk1\"> </span><span class=\"mtk3\">PasswordResetFormPassword</span></span></span></code></pre>\n<p>Now, when the user enters a new password and clicks on the <del>Reset Password</del> button, the user is taken to the login page, where he/she can enter his/her email address and the new password to log in to the application.</p>\n<p>This completes the password reset feature of our application and marks the end of the series.</p>\n<h3 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h3>\n<p>The user authentication that we implemented in this blog series is the exact implementation that I have on my site <a href=\"https://sundaray.io\">www.sundaray.io</a>.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    position: relative;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n    line-height: 1.4;\n  }\n  \n  .grvsc-code {\n    display: table;\n  }\n  \n  .grvsc-line {\n    display: table-row;\n    box-sizing: border-box;\n    width: 100%;\n    position: relative;\n  }\n  \n  .grvsc-line > * {\n    position: relative;\n  }\n  \n  .grvsc-gutter-pad {\n    display: table-cell;\n    padding-left: 0.75rem;\n    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);\n  }\n  \n  .grvsc-gutter {\n    display: table-cell;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n  }\n  \n  .grvsc-gutter::before {\n    content: attr(data-content);\n  }\n  \n  .grvsc-source {\n    display: table-cell;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-source:empty::after {\n    content: ' ';\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n  }\n  \n  .grvsc-gutter + .grvsc-source {\n    padding-left: 0.75rem;\n    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);\n  }\n  \n  /* Line transformer styles */\n  \n  .grvsc-has-line-highlighting > .grvsc-code > .grvsc-line::before {\n    content: ' ';\n    position: absolute;\n    width: 100%;\n  }\n  \n  .grvsc-line-diff-add::before {\n    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));\n  }\n  \n  .grvsc-line-diff-del::before {\n    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));\n  }\n  \n  .grvsc-line-number {\n    padding: 0 2px;\n    text-align: right;\n    opacity: 0.7;\n  }\n  \n  .synthwave-84 { background-color: #262335; }\n  .synthwave-84 .mtkb { font-weight: bold; }\n  .synthwave-84 .mtki { font-style: italic; }\n  .synthwave-84 .mtk8 { color: #72F1B8; }\n  .synthwave-84 .mtk1 { color: #FFFFFF; }\n  .synthwave-84 .mtk3 { color: #FF7EDB; }\n  .synthwave-84 .mtk10 { color: #FEDE5D; }\n  .synthwave-84 .mtk16 { color: #FF8B39; }\n  .synthwave-84 .mtk5 { color: #F97E72; }\n  .synthwave-84 .mtk6 { color: #36F9F6; }\n  .synthwave-84 .mtk12 { color: #FFFFFFEE; }\n  .synthwave-84 .mtk14 { color: #B6B1B1; }\n  .synthwave-84 .mtk9 { color: #FE4450; }\n  .synthwave-84 .mtk7 { color: #2EE2FA; }\n  .synthwave-84 .grvsc-line-highlighted::before {\n    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));\n  }\n</style>","frontmatter":{"title":"Implement JWT Based User Authentication in a MERN Stack App - Part 13","date":"2021-05-24"}}},"pageContext":{"slug":"/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-13/","prev":{"fields":{"slug":"/gsap-notes/"},"frontmatter":{"modules":null}},"next":{"fields":{"slug":"/implement-jwt-based-user-authentication-in-a-mern-stack-app-part-12/"},"frontmatter":{"modules":null}}}},
    "staticQueryHashes": ["3159585216"]}