Aspnetcore Identity用户缺少ApplicationUser自定义属性



i我基于带有应用程序内验证的内置模板(以下基本教程(,启用了一个简单的aspnetcore(3.0 Preview(Web应用程序。

我可以运行我的应用程序,当我尝试登录的安全页面时,我需要登录。

i注册并可以按预期登录。我可以在数据库中的Aspnetusers表中找到我的用户。

我成功修改了ApplicationUser添加CustomTag (string)并运行EF迁移和更新以将此列添加到AspNetUsers表中。我使用SQL UPDATE AspNetUsers...命令填充了列,因此该列现在包含" Hello World!"。

现在我运行了我的应用程序,但是我没有有关身份验证的用户的有用数据,除了他经过身份验证。

我在控制器操作中放了一个断点以查看身份验证的ApplicationUser,我看到了IdentityServer4添加的13个索赔的身份,但我不知道这与我的用户有何关系?用户已进行身份验证,但名称为null。该用户没有我的自定义属性" CustomTag"。我在错误的地方看吗?

大量搜索导致有关如何扩展模型(完成(以及如何运行EF迁移(完成(的深度文章。

很多搜索导致有关如何覆盖IdentityServer4的代码和UI的深度文章,但是在我的模板应用程序中没有任何内容,因此我应该在哪里应该修改代码。

任何人都可以指向我告诉我如何在控制器动作处理程序中看到我的ApplicationUser自定义属性吗?

您在这里处理两个单独的事情。身份是用户管理系统。它与ASP.NET Core中的身份验证/授权中间件分开(可以在有或没有身份的情况下使用(。

当您进行身份验证时,将创建一个ClaimsPrincipal。实体框架身份提供商根据数据库中的AspNetUsers表中的内容填写了一些索赔,但只有它本质上知道的内容。显然,它没有您添加的自定义属性的内置知识,因此不包括这些属性。身份服务器仅充当集中式身份提供商,创建此本金,然后将其发送返回请求应用程序。

长而简短,您不是在这里处理ApplicationUser,而只是与身份验证创建的特定原理相关的索赔集合。

如果需要,可以在任何时间获取实际关联的ApplicationUser以获取任何自定义数据:

var user = await _userManager.FindByIdAsync(User.FindFirstValue(ClaimTypes.NameIdentitifer));

您还可以选择通过从UserClaimsPrincipalFactory<TUser>派生和覆盖CreateAsync派生来补充索赔收集,以添加包括数据库在内的任何来源的其他索赔。不过,这仅在ASP.NET核心中起作用。对于身份服务器,您需要实现自定义IProfileService

如果要检索有关当前用户的全部详细信息,则可以在控制器操作中使用这样的代码:

var user = await _userManager.GetUserAsync(User); //_userManager is an instance of UserManager<TUser>

如果您愿意将索赔加载到Auth Cookie中时,则可以在签名时创建和注册(通过IdentityBuilder.AddClaimsPrincipalFactory<TFactory>()(实现(通过CC_14(,该实现可以在登录时添加您的附加属性必须击中数据库。

相关内容

最新更新