我希望在我的blazor应用程序中使用托管的ASP.NET Core实现密码重置选项。我做了脚手架,给了我Areas/Identity/Pages/Account/....
。我想制作一个带有表单的页面,该表单可以更改存储在AspNetUsers表中的用户的密码和电子邮件。很多文档都使用SendGrid进行电子邮件重置,但我不想使用电子邮件重置,相反,我想创建自己的剃刀页面,在那里我可以显示密码/电子邮件重置的表单。如何重置存储在AspNetUsers表中的现有用户电子邮件/密码?我不确定我是否需要使用ResetPasswordModel
,如果需要,我将如何实现它。如果对此有任何见解,我将不胜感激。提前谢谢。
我已经尝试给ResetPassword.cshtml
页面一个访问重置表单的路径,但这产生了一个显示A code must be supplied for password reset.
的页面。我认为这是不正确的方法
@page "/resetpassword"
@model ResetPasswordModel
@{
ViewData["Title"] = "Reset password";
}
<h1>@ViewData["Title"]</h1>
<h4>Reset your password.</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="Input.Code" type="hidden" />
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.ConfirmPassword"></label>
<input asp-for="Input.ConfirmPassword" class="form-control" />
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Reset</button>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
对于此重置密码逻辑,您应该通过电子邮件向用户发送一个链接,其中包含使用UserManager.GeneratePasswordResetTokenAsync(TUser(生成的代码。
事实上,任何人都可以访问您的重置密码页面,令牌应该确保只有通过电子邮件收到链接的用户才能重置密码。