专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

ASP。NETCoreIdentity系列之七

  在这节中我们主要介绍在ASP。NETCoreIdentity如何使用Claims,ASP。NETCoreIdentityClaims是颁发给用户键值对(namevalue)表示用户允许做什么。例如,驾驶执照颁发机构给个人颁发驾驶执照,如果驾照上的DOB是1990年12月21日,那么在这种情况下,claimname是DOB,claimvalue是1990年12月21日,签发人是驾驶执照当局。这意味着用户是由驾驶执照当局授权驾驶汽车在前面的Identity例子可以看到认证用户是基于用户邮箱和密码,我们也可以授权一个用户访问特定资源。注意Identity的Role是Claims,但不是所有Claims都是Role,ASP。NETCoreIdentity通过使用claims做授权和认证,这节我们将覆盖更详细细节。IdentityClaims授权,最简单的方法是检查claimvalue,并允许基于该值访问资源创建一个ClaimsController控制器,修改Index方法返回User。Claims,代码如下:spanclasscodesnippetouterspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordclassspanspanclasscodesnippettitleClaimsControllerspan:spanclasscodesnippettitleControllerspanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippettitleClaimsControllerspan(spanclasscodesnippetparamsspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanIActionResultspanclasscodesnippettitleIndexspan(spanclasscodesnippetparamsspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView(User。Claims);spanspanclasscodesnippetouter}spanspanclasscodesnippetouter}span在ASP。NETIdentity中如何获取用户的Claims呢?我们可以通过HttpContext对象的User属性,它返回当前用户的ClaimsPrincipal对象,该对象包含用户的所有claims,我们将该对象通过View展示到浏览器,创建一个Index。cshtml在ViewsClaims文件夹下,代码如下:spanclasscodesnippetoutermodelIEnumerablespanclasscodesnippettagspanclasscodesnippetnameSystem。Security。Claims。Claimspanspanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterViewData〔Title〕Claims;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcontainerspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringrowmb3spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsmspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringtabletableborderedalignmiddlespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan名称spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan颁发机构spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan类型spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan值spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterforeach(varclaiminModel。OrderBy(xx。Type))spanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Subject?。Namespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Issuerspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Typespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Valuespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspan
  我们运行应用程序使用并使用如下邮箱和密码进行登陆(如果没有可以自行添加)邮箱:tomyahoo。com密码:Coder77
  导航到https:localhost:7296Claims
  1、创建和删除Claims
  对一个用户创建和删除IdentityClaims,首先创建一个新的Create。cshtml,在ViewsClaims目录下,代码如下:spanclasscodesnippetouter{spanspanclasscodesnippetouterViewData〔spanclasscodesnippetstringTitlespan〕spanclasscodesnippetstring新增Claimspan;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterAllspanspanclasscodesnippetclassspanclasscodesnippetkeywordclassspanspanspanclasscodesnippetstringtextdangerspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterformmethodspanclasscodesnippetstringpostspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringmb3rowalignitemscenterspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm1spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamelabelspanspanclasscodesnippetattrforspanspanclasscodesnippetstringClaimTypespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcontrollabelspanspanClaim类型:spanclasscodesnippettagspanclasscodesnippetnamelabelspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm11spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameinputspanspanclasscodesnippetattrnamespanspanclasscodesnippetstringClaimTypespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringformcontrolspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringmb3rowalignitemscenterspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm1spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamelabelspanspanclasscodesnippetattrforspanspanclasscodesnippetstringClaimValuespanspanClaim值:spanclasscodesnippettagspanclasscodesnippetnamelabelspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm11spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameinputspanspanclasscodesnippetattrnamespanspanclasscodesnippetstringClaimValuespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringformcontrolspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringmb3rowalignitemscenterspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm11offsetsm1spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanclasscodesnippetattrtypespanspanclasscodesnippetstringsubmitspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnprimaryspanspan保存spanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanclasscodesnippetattraspactionspanspanclasscodesnippetstringIndexspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnsecondaryspanspanspanspanclasscodesnippetouter返回spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameformspanspanspan接下来,更新Index。cshtml并添加新增按钮和删除按钮spanclasscodesnippetoutermodelIEnumerableSystem。Security。Claims。Claimspanspanclasscodesnippetouter{spanspanclasscodesnippetouterViewData〔spanclasscodesnippetstringTitlespan〕spanclasscodesnippetstringClaimsspan;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetkeywordclassspanspanspanclasscodesnippetstringcontainerspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringrowmb3spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameaspanspanclasscodesnippetattraspactionspanspanclasscodesnippetstringCreatespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnprimaryspanspan新增spanclasscodesnippettagspanclasscodesnippetnameaspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsm3spanspanspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippetkeywordclassspanspanspanclasscodesnippetstringrowmb3spanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringcolsmspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanclasscodesnippetattrclassspanspanclasscodesnippetstringtabletableborderedalignmiddlespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan名称spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan颁发机构spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan类型spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamethspanspan值spanclasscodesnippettagspanclasscodesnippetnamethspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspan删除spanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametheadspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterforeach(varclaiminModel。OrderBy(xx。Type))spanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Subject?。Namespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Issuerspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。Typespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanclaim?。ValuespanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameformspanspanclasscodesnippetattraspactionspanspanclasscodesnippetstringDeletespanspanclasscodesnippetattrmethodspanspanclasscodesnippetstringpostspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameinputspanspanclasscodesnippetattrtypespanspanclasscodesnippetstringhiddenspanspanclasscodesnippetattrnamespanspanclasscodesnippetstringclaimValuesspanspanclasscodesnippetattrvaluespanspanclasscodesnippetstringclaim?。Type;claim?。Value;claim?。Issuerspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanclasscodesnippetattrtypespanspanclasscodesnippetstringsubmitspanspanclasscodesnippetattrclassspanspanclasscodesnippetstringbtnbtnsmbtndangerspanspanspanspanclasscodesnippetouter删除spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamebuttonspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnameformspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametdspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametrspanspanspanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametbodyspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnametablespanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippettagspanclasscodesnippetnamepspanspanspanspanclasscodesnippetouterspanclasscodesnippetregexppspanspan最后我们在ClaimsController添加新增和删除方法,与此同时我们将UserManager类通过构造函数依赖注入进去spanclasscodesnippetouterspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordclassspanspanclasscodesnippettitleClaimsControllerspan:spanclasscodesnippettitleControllerspanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordprivatespanUserManageruserManager;spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippettitleClaimsControllerspan(spanclasscodesnippetparamsUserManageruserManagerspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouteruserManageruserManager;spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanIActionResultspanclasscodesnippettitleIndexspan(spanclasscodesnippetparamsspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView(User。Claims);spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanIActionResultspanclasscodesnippettitleCreatespan(spanclasscodesnippetparamsspan)spanView();spanspanclasscodesnippetouter〔spanclasscodesnippetmetaHttpPostspan〕spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordasyncspanTaskIActionResultspanclasscodesnippettitleCreatespan(spanclasscodesnippetparamsspanclasscodesnippetkeywordstringspanclaimType,spanclasscodesnippetkeywordstringspanclaimValuespan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordvarspanuserspanclasscodesnippetkeywordawaitspanuserManager。GetUserAsync(HttpContext。User);spanspanclasscodesnippetouterClaimclaimspanclasscodesnippetkeywordnewspanClaim(claimType,claimValue,ClaimValueTypes。String);spanspanclasscodesnippetouterIdentityResultresultspanclasscodesnippetkeywordawaitspanuserManager。AddClaimAsync(user??spanclasscodesnippetkeywordnewspanAppUser(),claim);spanspanclasscodesnippetouterspanclasscodesnippetkeywordifspan(result。Succeeded)spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanRedirectToAction(spanclasscodesnippetstringIndexspan);spanspanclasscodesnippetouterspanclasscodesnippetkeywordelsespanspanspanclasscodesnippetouterErrors(result);spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView();spanspanclasscodesnippetouter}spanspanclasscodesnippetouter〔spanclasscodesnippetmetaHttpPostspan〕spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordpublicspanspanclasscodesnippetkeywordasyncspanTaskIActionResultspanclasscodesnippettitleDeletespan(spanclasscodesnippetparamsspanclasscodesnippetkeywordstringspanclaimValuesspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordvarspanuserspanclasscodesnippetkeywordawaitspanuserManager。GetUserAsync(HttpContext。User);spanspanclasscodesnippetouterspanclasscodesnippetkeywordstringspan〔〕claimValuesArrayclaimValues。Split(spanclasscodesnippetstring;span);spanspanclasscodesnippetouterspanclasscodesnippetkeywordstringspanclaimTypeclaimValuesArray〔spanclasscodesnippetnumber0span〕,claimValueclaimValuesArray〔spanclasscodesnippetnumber1span〕,claimIssuerclaimValuesArray〔spanclasscodesnippetnumber2span〕;spanspanclasscodesnippetouterClaim?claimUser。Claims。Where(xx。TypeclaimTypex。ValueclaimValuex。IssuerclaimIssuer)。FirstOrDefault();spanspanclasscodesnippetouterIdentityResultresultspanclasscodesnippetkeywordawaitspanuserManager。RemoveClaimAsync(user??spanclasscodesnippetkeywordnewspanAppUser(),claim);spanspanclasscodesnippetouterspanclasscodesnippetkeywordifspan(result。Succeeded)spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanRedirectToAction(spanclasscodesnippetstringIndexspan);spanspanclasscodesnippetouterspanclasscodesnippetkeywordelsespanspanspanclasscodesnippetouterErrors(result);spanspanclasscodesnippetouterspanclasscodesnippetkeywordreturnspanView(spanclasscodesnippetstringIndexspan);spanspanclasscodesnippetouter}spanspanclasscodesnippetouterspanclasscodesnippetfunctionspanclasscodesnippetkeywordvoidspanspanclasscodesnippettitleErrorsspan(spanclasscodesnippetparamsIdentityResultresultspan)spanspanspanclasscodesnippetouter{spanspanclasscodesnippetouterspanclasscodesnippetkeywordforeachspan(IdentityErrorerrorspanclasscodesnippetkeywordinspanresult。Errors)spanspanclasscodesnippetouterModelState。AddModelError(spanclasscodesnippetstringspan,error。Description);spanspanclasscodesnippetouter}spanspanclasscodesnippetouter}span新增方法
  首先我们从userManager。GetUserAsync()获取当前用户,接着我们添加Claim对象,最后我们将Claim对象添加到用户中。userManager。AddClaimAsync()可以为用户创建claim删除方法删除方法获取Claim值,切割字符串之后我们获取到了claimtype,claimvalueandclaimissuer对应的值,使用Linq获取选择的ClaimspanclasscodesnippetouterClaimclaimUser。Claims。Where(spanclasscodesnippetfunctionspanclasscodesnippetparamsxspanspanx。TypeclaimTypex。ValueclaimValuex。IssuerclaimIssuer)。FirstOrDefault();span通过调用userManager。RemoveClaimAsync()将用户Claim删除2、测试
  测试这个特性,运行应用程序并且使用tom用户进行登录,进入https:localhost:7296Claims页面,点击新增按钮:
  我们在新增页面输入下面值:
  每次创建完一个Claim,我们都需要重新登录,为了看到新的Claim我们必须重新登录一次:
  现在我们通过点击删除按钮删除刚才创建的claim。每次删除完成之后我们需要重新登录一下,才能看到最新的数据状态
  总结这一节我们主要介绍什么是Claims,针对当前用户如何创建和删除Claims,以及在表格内显示用户当前登录用户所有Claims。下一节我们将介绍如何使用Claims创建相应的策略进行用户认证,
  源代码地址:
  https:github。combingbingguiAsp。NetCoreSkilltreemasterAspNetCore。IdentityIdentity

硬科技投向标三部门出台加大支持科技创新税前扣除力度政策宁德时代不超140亿元投建电池项目科创板日报10月1日讯本周,硬科技领域周报包括国家能源局将加大新型电力基础设施建设力度新能源汽车免征车辆购置税政策延续至2023年底亿纬锂能拟100亿元投建储能与动力电池项目。政策华中最大的华为智能生活馆来了,还有等了两年的Mate50每个在光谷上过学的人,对世界城光谷步行街的印象不会太陌生。曾经让年轻人心驰神往的浪漫发生地,如今在一次又一次焕新中改头换面,在各大高校开学之际,为到来江城的百万年轻人们带来新一季期华擎发布最新迷你主机MarsADL,搭载12代英特尔处理器华硕旗下电脑品牌华擎(ASROCK)近期发布了一款型号为MarsADL的迷你主机,其机身的体积仅0。7L,最高搭载最新的12代英特尔i51235U处理器。Mars是华擎旗下的轻量化你应该升级到Applewatch8系列吗?来和历代对比一下吧苹果的新智能手表已经到来,这意味着你可能想知道你应该升级到AppleWatch系列8吗?与决定升级时通常的情况一样,答案将取决于您当前拥有的AppleWatch。8系列引入了温度传谷歌的云游戏野心,终究还是寿终正寝了享年3岁零2个月。谷歌公司不仅以其精彩绝伦的创业故事闻名于世,也经常以雄心壮志不得实现,最终只好裁撤自己旗下的产品和项目而著称。有好事的网友制作了一个类似于电子墓地的纪念网页,为2关爱女性丨全球首款智能乳腺超声机器人落户郴州市第三人民医院郴州头条郴州市第三人民医院近日,郴州市第三人民医院引进全球首款智能乳腺超声机器人AIBUS进行两癌群体性筛查活动,面向郴州200名教职工开展为期两天的免费乳腺筛查,真正将高科技医疗网络工程师的Golang之路Go数据类型(接口)版权声明我已加入维权骑士(httprightknights。com)的版权保护计划,知乎专栏网路行者下的所有文章均为我本人(知乎ID弈心)原创,未经允许不得转载。如果你喜欢我的文章这8项关键传感器技术,每一项都将深刻影响未来产业发展近10年,智能手机智能手表无人机等技术迅速进入我们的生活,而未来10年,各种可穿戴设备物联网设备机器人自动驾驶等将融入我们的生活。这其中,作为这些科技的技术基石之一,传感器技术既推富士康已开始生产Lordstown首款纯电动皮卡Endurance富士康已开始生产Lordstown首款纯电动皮卡Endurance科创板日报1日讯,近日,电动卡车初创公司LordstownMotors宣布,它已开始首款纯电动皮卡Enduranc春风得意马蹄疾近日,特斯拉因发布最新研发的擎天柱人型机器人Optimus又成顶流,CEO马斯克认为Optimus想要解决其它机器人缺少大脑而自行解决问题能力不足的痛点,进而从基础上改变人类文明的定位学生专用手机!360Q20Pro发布搭载天玑900,售价1798起说到360手机,相信很多8090后小伙伴一定不会感到陌生,360手机于2014年问世,产品主要可分为三个类别。360手机三大系列产品细分其中F系列主打实用派,价格亲民实惠,不过性能
詹姆斯连续得分30领跑NBA,无奈湖人5胜6负的战绩堪忧!为何?疯狂刷分,不防守老皇帝詹姆斯最近可谓顺风顺水,自从康复归来后,个人进攻得分火爆,连续得分30,一波得分高潮竟然追到了联盟第二的场均得分28。9分,你不得不佩服这个37岁老汉的出色状有人说在NBA的比赛上,球员很少进行掏球的动作。这是为什么?你怎么看?其实在野球场上,遇到一些拼命防守的人,他们就会无时无刻的贴近你的身体,当我们再次选择胯下运球直接晃开对手突破的时候,防守球员就会选择掏球,这一点让我们非常感觉难受,因为他们的掏球动联想事件发酵过程中到底有多少论据是以讹传讹呢?联想是国内的优秀企业,几个别有用心的人为了配合美帝打压中国企业,煽动舆情带节奏,疯狂的诋毁攻击联想,罔顾事实,造谣制造对立。最终是搬起石头砸自己的脚!从古至今,凡是处心积虑诋毁攻击洗钱到底是怎么一回事?比方你偷了一个亿!这一个亿你是不敢存银行的,因为你无法说明这笔钱的合法来源,你也不敢买游艇别墅啥的,原因同上!那么咋样才能让这笔钱有个合法的来源呢?那就要通过洗钱!洗钱的方法非常多鸿蒙手机,哪些值得入手?哪些手机都值得入手,看看自己的接受价位。几百元的有nova4,nova4e,P10,mate10,荣耀8X,荣耀10,v10。1000元有荣耀9X,mate20,nova5,P20为什么有的手机在拼多多的售价比在官网便宜200400元?文小伊评科技比官网便宜没什么大惊小怪的,官网的价格基本都是最贵的,因为压根就不为了卖出去,在正常的销售环节,真正在手机官网产生的订单真的很少,而官网的标价更多的是一种对经销商销售的考驾照早考和晚考的区别是什么?对于有正常需求的普通驾驶人来说,早学晚学区别不是很大,无非就是早开一年车,或者晚开一年车的问题,早考晚考并不是很重有,而对于有更多需求的人来说,早学驾照还是有好处的,主要区别在于两手机价格被小米拉下来了,为什么苹果三星华为ov还敢卖3000多?一直以来小米手机都是主打的性价比策略,小米手机的售价确实非常便宜。不过要说小米拉下了整体手机行业的价格那是不可能的。要知道在小米手机出现以前,三星苹果等手机的手机也是在3000元以如果价格相近,你会选择去年的旗舰机还是今年的中端机?谢邀!从某种程度上来说,一般而言,即便是去年的旗舰机,在价格方面恐怕下跌的幅度也并没有那么狠,和中端手机也一直维持着一部分的差距,而两者因为定位的问题,所以其实会导致硬件性能的一些2019款大众朗逸自动低配,价格81900,能不能给点建议?本人2020款宝来1。5自动低配,开了1年感觉还行,油耗综合5。5L最好别买,这车安全性深度怀疑,故障率高我的是2011款2。0自吸,落地15万(可能是13款,记不得了,反正外观偏你曾脑子一抽买过什么东西?来来来小伙伴们!快来围观我脑子抽筋现场!我脑子一抽,买了3台三菱重工的柜式空调!一台15000,三台45000,加上900块钱的安装费用,总价将近四万六!回想起来,那是2018年,
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网