前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Ids4实战】深究配置——用户信息操作篇

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

作者头像
老张的哲学
发布2022-04-11 14:31:19
3830
发布2022-04-11 14:31:19
举报
文章被收录于专栏:NetCore 从壹开始

(此花无日不春风)

其实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、如何添加第三方的登录方式;

等等等等。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档