• 从零开始Blazor Server(14)--修改密码


    目前,我们只做了在用户管理里强行修改密码,而没有做用户自行修改密码的功能,今天我们来实现它。


    首先,我们的用户密码修改最好的位置应该就是在头像下面的下拉菜单里,所以我们在那里的LinkTemplate增加一个LinkButton

            <Logout ImageUrl="images/argo-c.png" DisplayName="@_user.Name" UserName="@_user.UserName">
                <LinkTemplate>
                    <LinkButton Icon="fa fa-gear" Text="修改密码" Color="Color.None" OnClick="ChangePassword">LinkButton>
                    <LogoutLink Url="/api/account/logout">LogoutLink>
                LinkTemplate>
            Logout>

    然后我们需要创建一个ChangePasswordVO

    public class ChangePassword
    {
        [Display(Name = "原密码")]
        [Required(ErrorMessage = "原密码不能为空")]
        [AutoGenerateColumn(ComponentType = typeof(BootstrapPassword))]
        public string? OldPassword { get; set; }
    
        [Display(Name = "新密码")]
        [Required(ErrorMessage = "新密码不能为空")]
        [AutoGenerateColumn(ComponentType = typeof(BootstrapPassword))]
        public string? NewPassword { get; set; }
        
        [Display(Name = "重复新密码")]
        [Compare(nameof(NewPassword), ErrorMessage = "两次密码不一致")]
        [AutoGenerateColumn(ComponentType = typeof(BootstrapPassword))]
        public string? RePassword { get; set; }
    }

    这里面我们让旧密码不能为空,新密码不能为空,然后确认密码要与新密码内容一致。

    这里我们还可以加比如位数的验证之类的,甚至可以自己写校验规则。我这里就不写了。

    然后我们使用[AutoGenerateColumn(ComponentType = typeof(BootstrapPassword))]指定我们的输入框是BootstrapPassword,以密码方式显示,不然默认显示为Input它不好看。


    最后就是我们使用EditDialog把内容显示出来。

        private void ChangePassword()
        {
            var option = new EditDialogOption()
            {
                Title = "修改密码",
                Size = Size.Medium,
                Model = new ChangePassword(),
                ItemsPerRow = 1,
                RowType = RowType.Normal,
                OnEditAsync = async context =>
                {
                    if (context.Model is not ChangePassword changePassword)
                    {
                        await ToastService.Show(new ToastOption()
                        {
                            Category = ToastCategory.Error,
                            Title = "保存出错",
                            Content = "类型转换错误"
                        });
                        return false;
                    }
                    var oldPassword = changePassword.OldPassword.ToMD5Encrypt();
                    if (!await UserEntity.Select.Where(x => x.Id == _user.Id && x.Password == oldPassword).AnyAsync())
                    {
                        await ToastService.Show(new ToastOption()
                        {
                            Category = ToastCategory.Error,
                            Title = "保存出错",
                            Content = "原密码不正确,请检查原密码"
                        });
                        return false;
                    }
                    var newPassword = changePassword.NewPassword.ToMD5Encrypt();
                    _user.Password = newPassword;
                    await _user.SaveAsync();
                    return true;
                }
            };
            DialogService.ShowEditDialog(option);
        }

    这里我们解释一下,OnEditAsync就是我们点击保存按钮以后的回调,返回true则会关闭弹窗,false不会。

    所以我们就判断一下当前用户密码是否正确,如果不正确则报错。

    否则我们保存新密码。


    这样,我们的修改密码功能就完成了。


    代码在代码在https://github.com/j4587698/BlazorLearn,分支lesson14

  • 相关阅读:
    C语言之文件操作
    Vue使用脚手架出现问题 2
    CentOS部署ElasticSearch7.6.1集群
    Thrift、Dubbo、Spring Cloud 和 gRPC
    2022年0701-Com.Java.Basis第二课《Java的八大基本数据类型》
    如果在线上遇到了OOM,该如何解决?
    15个增加您的网站流量的Google Search Console(Google搜索控制台)专家技巧
    linux系统 删除文件命令
    前端培训丁鹿学堂:js中箭头函数的面试相关总结
    Python - 通过/SSH 获取远程主机的 env 变量
  • 原文地址:https://www.cnblogs.com/j4587698/p/16620240.html