Sitecore 10.1中是否可以修改用户名的验证规则?
Sitecore 10.1 自定义用户名验证规则方案
配置变更说明
Sitecore 10.1版本重构了身份验证体系,原有旧版本中AccountNameValidation配置项已被废弃,用户名验证规则调整为基于ASP.NET Identity Core体系实现。
方案1:通过配置补丁调整基础验证规则
如果仅需调整允许使用的用户名字符集、邮箱唯一性等基础规则,可直接通过Sitecore配置补丁实现:
- 在
App_Config/Include目录下创建自定义配置补丁文件,命名可自定义,如Sitecore.Identity.UserRules.Custom.config - 写入如下配置内容,按需调整参数值:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/"> <sitecore> <identity> <UserOptions> <!-- 自定义允许的用户名字符集,示例包含大小写字母、数字、横杠、下划线、点、@、加号 --> <AllowedUserNameCharacters set:value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+" /> <!-- 可选配置:要求用户名绑定的邮箱全局唯一 --> <RequireUniqueEmail set:value="true" /> </UserOptions> </identity> </sitecore> </configuration>
- 保存文件后重启Sitecore实例即可生效。
方案2:自定义验证器实现复杂规则
如果需要实现正则校验、长度限制、特殊规则判定等复杂验证逻辑,可通过自定义用户验证器实现:
- 实现
IUserValidator<SitecoreUser>接口编写自定义验证逻辑,示例代码如下:
using Microsoft.AspNetCore.Identity; using Sitecore.Security.Accounts; using System.Threading.Tasks; namespace YourCustomNamespace { public class CustomUserNameValidator : IUserValidator<SitecoreUser> { public async Task<IdentityResult> ValidateAsync(UserManager<SitecoreUser> manager, SitecoreUser user) { // 示例:限制用户名长度为3-20位 if (string.IsNullOrWhiteSpace(user.UserName) || user.UserName.Length <3 || user.UserName.Length >20) { return IdentityResult.Failed(new IdentityError { Description = "用户名长度需控制在3-20位之间" }); } // 可添加更多自定义规则,比如正则匹配、敏感词校验等 return IdentityResult.Success; } } }
- 将编译后的dll部署到Sitecore网站的bin目录
- 通过配置补丁注册自定义验证器,替换默认实现:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> <sitecore> <services> <register serviceType="Microsoft.AspNetCore.Identity.IUserValidator`1[[Sitecore.Security.Accounts.SitecoreUser, Sitecore.Kernel]], Microsoft.AspNetCore.Identity" implementationType="YourCustomNamespace.CustomUserNameValidator, YourAssemblyName" patch:instead="register[@serviceType='Microsoft.AspNetCore.Identity.IUserValidator`1[[Sitecore.Security.Accounts.SitecoreUser, Sitecore.Kernel]], Microsoft.AspNetCore.Identity']" /> </services> </sitecore> </configuration>
- 重启Sitecore实例后规则生效。
内容的提问来源于stack exchange,提问作者Kato Tetsuya
相关产品推荐
相关产品推荐

