Blazor入门100天身份验证和授权(5)本地化资源
目录建立默认带身份验证Blazor程序角色组件特性过程逻辑DB改Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql生成实体类,freesql管理ids数据表初始化Roles,freesql外键导航属性完善freesql和bb特性本节源码
https:gitee。comdensen2014Blazor100treeBlazor教程155b16blazorIDS2拉取IDS源码到本地
自定义字段自定义字段参考https:www。cnblogs。comdensen2014p17083937。html如果没有做上一个步骤,要重新来一遍:把项目其他的Identity也替换为新的WebAppIdentityUser类如果接着教程弄的,就已经生成完整的代码了。本地化资源安利一个小工具https:git删hub。comKerwin1202VsTranslator
开启自动翻译后,鼠标停留就自动翻译,点击翻译语句直接替换原字符串,太解放生产力了!
选几个常用的处理一下1。本地化登录页面
文件AreasIdentityPagesAccountLogin。cshtml
pagemodelLoginModel{ViewData〔Title〕登录;}h1ViewData〔Title〕h1sectionsectionsectionh3使用其他服务登录。h3hr{if((Model。ExternalLogins?。Count??0)0){p没有配置外部身份验证服务。查看链接文章关于设置此ASP。NET应用程序以支持通过外部服务登录。}else{}}sectionsectionScripts{partialnameValidationScriptsPartial}后置代码Login。cshtml。cs里面的InputModel也处理一下publicclassInputModel{summary此API支持ASP。NETCoreIdentity默认UI基础结构,不打算使用直接来自您的代码。此API可能会在未来的版本中更改或删除。summary〔Required〕〔EmailAddress〕publicstringEmail{get;set;}summary此API支持ASP。NETCoreIdentity默认UI基础结构,不打算使用直接来自您的代码。此API可能会在未来的版本中更改或删除。summary〔Required〕〔DataType(DataType。Password)〕〔Display(Name密码)〕publicstringPassword{get;set;}summary此API支持ASP。NETCoreIdentity默认UI基础结构,不打算使用直接来自您的代码。此API可能会在未来的版本中更改或删除。summary〔Display(Name记住账号?)〕publicboolRememberMe{get;set;}}运行截图
2。本地化注册页面
文件AreasIdentityPagesAccountRegister。cshtml
注册密码默认长度有两个地方设置
1。Program。cs设置builder。Services。AddDefaultIdentityWebAppIdentityUser(o{Passwordsettings。o。Password。RequiredLength1;})Register。cshtml。cs的InputModel
修改StringLength特性,顺便添加Display特性〔Required〕〔StringLength(100,MinimumLength1,ErrorMessage{0}的长度必须至少为{2},最多为{1}个字符。)〕〔DataType(DataType。Password)〕〔Display(Name密码)〕publicstringPassword{get;set;}运行截图
3。本地化资料页面,添加全名
文件AreasIdentityPagesAccountManageIndex。cshtml
添加代码inputaspforInput。Nameclassformcontrolplaceholder请输入您的全名。labelaspforInput。NameclassformlabellabelspanaspvalidationforInput。Nameclasstextdangerspan
后置代码文件Index。cshtml。cs
在publicstringPhoneNumber{get;set;}后加入代码publicclassInputModel{。。。〔Display(Name名称)〕publicstringName{get;set;}}
在LoadAsync()里加入Name字段相关代码privateasyncTaskLoadAsync(WebAppIdentityUseruser){varuserNameawaituserManager。GetUserNameAsync(user);varphoneNumberawaituserManager。GetPhoneNumberAsync(user);varnameuser。Name;UsernameuserName;InputnewInputModel{PhoneNumberphoneNumber,Namename};}
在OnPostAsync()里加入Name字段相关代码publicasyncTaskIActionResultOnPostAsync(){varuserawaituserManager。GetUserAsync(User);if(usernull){returnNotFound(34;无法加载具有ID的用户{userManager。GetUserId(User)}。);}if(!ModelState。IsValid){awaitLoadAsync(user);returnPage();}varphoneNumberawaituserManager。GetPhoneNumberAsync(user);if(Input。PhoneNumber!phoneNumber){varsetPhoneResultawaituserManager。SetPhoneNumberAsync(user,Input。PhoneNumber);if(!setPhoneResult。Succeeded){StatusMessage尝试设置电话号码时出现意外错误。;returnRedirectToPage();}}varnameuser。Name;if(Input。Name!name){user。NameInput。Name;awaituserManager。UpdateAsync(user);}awaitsignInManager。RefreshSignInAsync(user);StatusMessage你的个人资料已经更新;returnRedirectToPage();}运行截图
本节源码
https:gitee。comdensen2014Blazor100treeBlazor教程155b16blazorIDS2源代码
https:gitee。comdensen2014Blazor100(镜像非最新版)关联项目
FreeSql
BABlazor知识共享许可协议
本作品采用知识共享署名非商业性使用相同方式共享4。0国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow(包含链接:https:github。comdensen2014),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。转载声明
本文来自博客园,作者:周创琳AlexChow,转载请注明原文链接:https:www。cnblogs。comdensen2014p17083938。htmlAlexChow
今日头条博客园知乎GiteeGitHub
分类:Blazor,BootstrapBlazor