gpt4 book ai didi

c# - 如何根据 ASP.NET Core MVC 中用户表的字段添加声明?

转载 作者:行者123 更新时间:2023-12-02 02:43:08 26 4
gpt4 key购买 nike

如何根据 ASP.NET Core MVC 中用户表中保存的部门名称添加声明?我有多个属于不同部门的用户。

根据他们的部门,我想创建 claim 。请指导我如何执行此操作。

我知道如何使用声明存储创建和编辑用户或删除用户声明,但不知道上述问题。

最佳答案

根据您的描述,我建议您创建一个继承UserClaimsPrincipalFactory的自定义声明工厂。

然后,您可以在重写的GenerateClaimsAsync方法中添加其他声明。

更多详细信息,您可以引用以下代码:

MyUserClaimsPrincipalFactory:

using IdentityTestDemo.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;

namespace IdentityTestDemo
{
public class MyUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser>
{
private ApplicationDbContext _appliationDbContext;
public MyUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager,
IOptions<IdentityOptions> optionsAccessor,ApplicationDbContext applicationDbContext)
: base(userManager, optionsAccessor)
{
_appliationDbContext = applicationDbContext;
}

protected override async Task<ClaimsIdentity> GenerateClaimsAsync(IdentityUser user)
{
//get the data from dbcontext
var Iuser= _appliationDbContext.Users.Where(x => x.EmailConfirmed == true).FirstOrDefault();

var identity = await base.GenerateClaimsAsync(user);
//Get the data from EF core

identity.AddClaim(new Claim("EmailTest", Iuser.Email));
return identity;
}
}
}

启动.cs:

    public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>().AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>(); ;
services.AddControllersWithViews();
services.AddRazorPages();
}

在 Controller 中获取声明:

        var result = User.FindFirst("EmailTest").Value;

结果:

enter image description here

关于c# - 如何根据 ASP.NET Core MVC 中用户表的字段添加声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63234597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com