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

此花无日不春风

其实IdentityServer4的小项目已经基本完结了,但是我总感觉还是有很多东西没有深入挖掘和研究的,这不,二群里有小伙伴问到了一个常见的问题,因为我去年都见到了,一直没有想过去解决它,花了半个小时研究代码和搜索资料后,基本解决了,分享出来,让更多的人了解,这是一个小品文,不会讲原理,一笔带过,就说说如何操作即可。
1、问题的由来
其实这个问题很简单,我相信任何做过Ids4授权认证的都应该遇到过,其实准确来说是用过微软官方Identity类库的应该遇到过,就是注册的时候,提示强密码策略,奇烦:

相信你一看就能明白,官方默认的密码是强密码策略,要英文,数字,大小写,特殊符号,而且昵称、姓名,还只能是字母和数据,怎么看就不舒服,虽然我也一直坚持了很长时间,那有没有办法修改下呢,还真的有。
其实好的框架就是这样的,有限制就会有配置,这才是好的框架,那关键是如何修改这个配置,其实很简单,这里有两种方案,你任意使用即可。
2、如何修改默认配置

1、AddIdentity 内配置
我就直接上代码了,都有注释:

 services.AddIdentity(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()

     .AddDefaultTokenProviders();

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

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

1、不对用户名进行限制,可以是中文;
2、密码只需要小写英文和数字即可;
3、长度至少是八位;

其他的,我就放开了,这样比较人性化一点,当然,如果你感觉这么配置不好看,也可以用这种方案。
2、单独配置
具体的我就不解释了,和上边的都一样,只不过是单独拎出来了:

  services.Configure(

    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、如何添加第三方的登录方式;
等等等等。
未来还是有很多路要走,加油!