ASP.NET CORE和BLAZOR:重置密码

问题描述 投票:1回答:1

Hy,

我是blazor和.net的新手,我想知道如何才能以最佳方式实施密码重置。目前,我正在使用此示例登录等:Blazor Authentication Sample。此示例不包括重置密码的示例。因此,我自己正在寻找解决方案。

这是有的,它是剃刀组件

@page "/ResetPassword"

@inject UserManager<IdentityUser> userManager
@inject NavigationManager navigationManager
@inject IDataProtectionProvider dataProtectionProvider

@if (IsResetSend)
{
    <h3>Reset Password</h3>
    <div>
        A mail has been send with a password reset link, please click this link to set a new password.
    </div>
    <br />
    <a href="/">Back</a>
}
else
{
    <h3>Reset Password</h3>
    <EditForm Model="resetPassword" OnValidSubmit="@SendResetPassword">
        <div class="field">
            <label class="label">E-mail</label>
            <div class="control">
                <InputText id="email" class="input" type="email" @bind-Value="@resetPassword.Email"></InputText>
            </div>
        </div>
        <div class="field">
            <div class="control">
                <button type="submit" class="button is-primary">Sign in</button>
            </div>
        </div>
    </EditForm>
}

@code {

    ResetPassword resetPassword = new ResetPassword();

    bool IsResetSend = false;

    public async void SendResetPassword()
    {
        List<string> mailTo = new List<string>();

        string passwordResetToken;

        var user = await userManager.FindByEmailAsync(resetPassword.Email);

        if (user != null)
        {
            mailTo.Add(resetPassword.Email);

            passwordResetToken = await userManager.GeneratePasswordResetTokenAsync(user);

            //Send mail with the relevant token
            Webco.Email.Entities.EmailObject emailObject = new Webco.Email.Entities.EmailObject();
            emailObject.Email_To = mailTo;
            emailObject.Email_Subject = "Password Reset Webco !";
            emailObject.Email_Message = "Hy There, <br> Please click this link to reset your password : <br> https://localhost:44384/" + passwordResetToken;
            emailObject.SendEmail(emailObject);

            IsResetSend = true;
        }
    }

    public class ResetPassword
    {
        [Required]
        public string Email { get; set; }

    }

如您所见,这是一种简单的方法,目前我似乎找不到的一件事是一种存储密码重置令牌的方法,并在邮件中单击它时将其捕获。

在我愿意之前]]

  1. 创建随机令牌,将其存储在字段中的数据库中;当前用户的UserResetToken
  2. [然后用户单击链接时,令牌将提供给网页[Parameter]。
  3. 然后,存储过程将找到令牌并将其清除,然后在另一个用户表单上更改密码。
  4. 我不认为这是基于自定义存储过程的最佳实践。有人可以指导我吗?

问候,

嘿,我是blazor和.net的新手,我想知道如何才能以最佳方式实施密码重置。目前,我正在使用此示例登录等:Blazor身份验证示例。这个...

asp.net-core blazor-server-side asp.net-core-identity razor-components
1个回答
0
投票

Blazor已包含所有必需的示例。创建一个新项目,然后选择作为身份验证的应用内存储。在项目上用鼠标右键单击,然后选择添加->新建脚手架元素,然后在右侧选择标识。 Visual Studio将询问您要覆盖哪些文件,并创建一个完整的示例,您可以使用该示例在主应用程序中对其进行构建。

© www.soinside.com 2019 - 2024. All rights reserved.