【Ids4实战】深究配置——用户信息操作篇

2022-04-11 14:31:19 浏览数 (5)

(此花无日不春风)

其实IdentityServer4的小项目已经基本完结了,但是我总感觉还是有很多东西没有深入挖掘和研究的,这不,二群里有小伙伴问到了一个常见的问题,因为我去年都见到了,一直没有想过去解决它,花了半个小时研究代码和搜索资料后,基本解决了,分享出来,让更多的人了解,这是一个小品文,不会讲原理,一笔带过,就说说如何操作即可。

1、问题的由来

其实这个问题很简单,我相信任何做过Ids4授权认证的都应该遇到过,其实准确来说是用过微软官方Identity类库的应该遇到过,就是注册的时候,提示强密码策略,奇烦:

相信你一看就能明白,官方默认的密码是强密码策略,要英文,数字,大小写,特殊符号,而且昵称、姓名,还只能是字母和数据,怎么看就不舒服,虽然我也一直坚持了很长时间,那有没有办法修改下呢,还真的有。

其实好的框架就是这样的,有限制就会有配置,这才是好的框架,那关键是如何修改这个配置,其实很简单,这里有两种方案,你任意使用即可。

2、如何修改默认配置

1、AddIdentity 内配置

我就直接上代码了,都有注释:

代码语言:javascript复制
 services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
    {
        options.User = new UserOptions
        {
            RequireUniqueEmail = true, //要求Email唯一
            AllowedUserNameCharacters = null //允许的用户名字符,null表示不限制
        };
        options.Password = new PasswordOptions
        {
            RequiredLength = 8, //要求密码最小长度,默认是 6 个字符
            RequireDigit = true, //要求有数字
            RequiredUniqueChars = 3, //要求至少要出现的字母数
            RequireLowercase = true, //要求小写字母
            RequireNonAlphanumeric = false, //要求特殊字符
            RequireUppercase = false //要求大写字母
        };
        options.Lockout = new LockoutOptions
        {
            AllowedForNewUsers = true, // 新用户锁定账户
            DefaultLockoutTimeSpan = TimeSpan.FromHours(1), //锁定时长,默认是 5 分钟
            MaxFailedAccessAttempts = 3 //登录错误最大尝试次数,默认 5 次
        };
        options.SignIn = new SignInOptions
        {
            RequireConfirmedEmail = true, //要求激活邮箱
            RequireConfirmedPhoneNumber = true //要求激活手机号
        };
        options.ClaimsIdentity = new ClaimsIdentityOptions
        {
            // 这里都是修改相应的Cliams声明的
            RoleClaimType = "IdentityRole",
            UserIdClaimType = "IdentityId",
            SecurityStampClaimType = "SecurityStamp",
            UserNameClaimType = "IdentityName"
        };
    })
     .AddEntityFrameworkStores<ApplicationDbContext>()
     .AddDefaultTokenProviders();

你要是看不懂,那可就是真的底子太薄了,需要恶补了。

我现在是有以下几个规则:

1、不对用户名进行限制,可以是中文;

2、密码只需要小写英文和数字即可;

3、长度至少是八位;

其他的,我就放开了,这样比较人性化一点,当然,如果你感觉这么配置不好看,也可以用这种方案。

2、单独配置

具体的我就不解释了,和上边的都一样,只不过是单独拎出来了:

代码语言:javascript复制
  services.Configure<IdentityOptions>(
    options =>
    {
        options.Password.RequireDigit = false;
        options.Password.RequireLowercase = false;
        options.Password.RequireNonAlphanumeric = false;
        options.Password.RequireUppercase = false;
        options.SignIn.RequireConfirmedEmail = false;
        options.SignIn.RequireConfirmedPhoneNumber = false;
        options.User.AllowedUserNameCharacters = null;
    });

3、结果展示

效果还是很明显的,最后也是注册成功:

(登录页)

(昵称显示)

当然,这只是冰山一角,还有很多很多的问题需要挖掘,比如:

1、注册的时候,可以不用密码加密么,或者自定义加密;

2、完整的修改密码流程是什么;

3、如何添加第三方的登录方式;

等等等等。

未来还是有很多路要走,加油!

1 人点赞