簡體   English   中英

如何根據 ASP.NET Core MVC 中用戶表中的字段添加聲明?

[英]How to add claims based on the fields from users table in ASP.NET Core MVC?

如何根據 ASP.NET Core MVC 中 users 表中保存的部門名稱添加聲明? 我有多個用戶屬於不同的部門。

根據他們的部門,我想創建索賠。 請指導我如何做到這一點。

我知道如何使用聲明存儲創建和編輯用戶或刪除用戶聲明,但不知道上述問題。

根據您的描述,我建議您可以創建一個繼承UserClaimsPrincipalFactory的自定義聲明工廠。

然后,您可以在 override 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;

結果:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM