[英]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.