目录建立默认带身份验证 Blazor 程序 角色/组件/特性/过程逻辑 DB 改 Sqlite 将自定义字段添加到用户表 脚手架拉取IDS文件,本地化资源 freesql 生成实体类,freesql 管理ids数据表 初始化 Roles,freesql 外键 => 导航属性 完善 freesql 和 bb 特性 本节源码 https:// gitee.com/densen2014/Blazor100/tree/Blazor-教程15-5/b16blazorIDS2 拉取IDS源码到本地 自定义字段自定义字段参考 https://www.cnblogs.com/densen2014/p/17083937.html 如果没有做上一个步骤,要重新来一遍: 把项目其他的 Identity 也替换为新的 WebAppIdentityUser 类 如果接着教程弄的,就已经生成完整的代码了. 本地化资源安利一个小工具https://git删hub.com/Kerwin1202/VsTranslator 开启自动翻译后, 鼠标停留就自动翻译, 点击翻译语句直接替换原字符串,太解放生产力了! 选几个常用的处理一下1. 本地化登录页面 文件 AreasIdentityPagesAccountLogin.cshtml @page @model LoginModel @{ ViewData["Title"] = "登录"; }@ViewData["Title"]
@section Scripts { 使用其他服务登录.
@{ if ((Model.ExternalLogins?.Count ?? 0) == 0) {没有配置外部身份验证服务。查看链接 文章 关于设置此 ASP.NET 应用程序以支持通过外部服务登录. } else { } }
} 后置代码Login.cshtml.cs里面的InputModel也处理一下 public class InputModel { /// /// 此 API 支持 ASP.NET Core Identity 默认 UI 基础结构,不打算使用 /// 直接来自您的代码。此 API 可能会在未来的版本中更改或删除。 /// [Required] [EmailAddress] public string Email { get; set; } ////// 此 API 支持 ASP.NET Core Identity 默认 UI 基础结构,不打算使用 /// 直接来自您的代码。此 API 可能会在未来的版本中更改或删除。 /// [Required] [DataType(DataType.Password)] [Display(Name = "密码")] public string Password { get; set; } ////// 此 API 支持 ASP.NET Core Identity 默认 UI 基础结构,不打算使用 /// 直接来自您的代码。此 API 可能会在未来的版本中更改或删除。 /// [Display(Name = "记住账号?")] public bool RememberMe { get; set; } } 运行截图 2. 本地化注册页面 文件 AreasIdentityPagesAccountRegister.cshtml 注册密码默认长度有两个地方设置 1.Program.cs 设置builder.Services.AddDefaultIdentity(o => { // Password settings. o.Password.RequiredLength = 1; } ) Register.cshtml.cs 的 InputModel 修改 StringLength 特性, 顺便添加 Display 特性 [Required] [StringLength(100, MinimumLength=1, ErrorMessage = "{0} 的长度必须至少为 {2},最多为 {1} 个字符.")] [DataType(DataType.Password)] [Display(Name = "密码")] public string Password { get; set; } 运行截图 3. 本地化资料页面, 添加全名 文件 AreasIdentityPagesAccountManageIndex.cshtml 添加代码 后置代码文件 Index.cshtml.cs 在 public string PhoneNumber { get; set; } 后加入代码 public class InputModel { ... [Display(Name = "名称")] public string Name { get; set; } } 在 LoadAsync() 里加入 Name 字段相关代码 private async Task LoadAsync(WebAppIdentityUser user) { var userName = await _userManager.GetUserNameAsync(user); var phoneNumber = await _userManager.GetPhoneNumberAsync(user); var name = user.Name; Username = userName; Input = new InputModel { PhoneNumber = phoneNumber, Name = name }; } 在 OnPostAsync() 里加入 Name 字段相关代码 public async Task OnPostAsync() { var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound(#34;无法加载具有 ID 的用户 "{_userManager.GetUserId(User)}"."); } if (!ModelState.IsValid) { await LoadAsync(user); return Page(); } var phoneNumber = await _userManager.GetPhoneNumberAsync(user); if (Input.PhoneNumber != phoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); if (!setPhoneResult.Succeeded) { StatusMessage = "尝试设置电话号码时出现意外错误."; return RedirectToPage(); } } var name = user.Name; if (Input.Name != name) { user.Name = Input.Name; await _userManager.UpdateAsync(user); } await _signInManager.RefreshSignInAsync(user); StatusMessage = "你的个人资料已经更新"; return RedirectToPage(); } 运行截图 本节源码 https://gitee.com/densen2014/Blazor100/tree/Blazor-教程15-5/b16blazorIDS2源代码 https://gitee.com/densen2014/Blazor100 (镜像/非最新版)关联项目 FreeSql BA & Blazor 知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow(包含链接: https://github.com/densen2014 ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系 。转载声明 本文来自博客园,作者:周创琳 AlexChow,转载请注明原文链接:https://www.cnblogs.com/densen2014/p/17083938.htmlAlexChow 今日头条 | 博客园 | 知乎 | Gitee | GitHub 分类: Blazor, BootstrapBlazor