28

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

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA%3D%3D&%3Bmid=2654078561&%3Bidx=7&%3Bsn=d6f791a4631a8f50a6fa815ea6e23a5a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

QJfQJzi.png!web

此花无日不春风

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

1、问题的由来

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

MvqARzR.png!web

VFZnMnb.png!web

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

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

2、如何修改默认配置

1、AddIdentity 内配置

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

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、单独配置

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

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、结果展示

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

naMjuu2.png!web

(登录页)

mMj6f2z.png!web

(昵称显示)

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

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

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

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

等等等等。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK