在我的场景中,用户和企业之间有着多到多的关系。因此,企业可以有许多员工,用户可以是许多企业的雇员。
在登录页面上,我只想显示电子邮件和密码文本框。一旦他们成功地验证了身份,我想把他们重定向到一个页面,这个页面上有他们受雇的业务的下拉列表。
由于他们已经确认了身份,他们的索赔已经被填充。之后我如何添加另一个索赔(他们的BusinessID)?
发布于 2021-01-26 09:38:17
答案是指何时对您进行身份验证,并从OAUTH服务器获得声明。我们不知道您是否在使用本地标识表,或者OAUTH,但无论如何。
当用户选择业务类型. implementation
我包括一些旧代码(最后我们以另一种方式实现),但也许可以帮助您。
。
using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.Security.Claims;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
namespace Common.Models.Identity {
public class User : IdentityUser<int> {
public bool SendAlertByEmail { get; set; }
public int ClientId { get; set; } = Client.DefaultClientId;
[JsonIgnore, ForeignKey("ClientId")]
public virtual Client Client { get; set; } = null!;
}
public class ApplicationUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<User> {
public ApplicationUserClaimsPrincipalFactory(
UserManager<User> userManager,
IOptions<IdentityOptions> optionsAccessor)
: base(userManager, optionsAccessor) {
}
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(User user) {
ClaimsIdentity identity;
identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(new Claim("ClientId", user.ClientId.ToString()));
identity.AddClaim(new Claim("ClientDescription", user.Client.Description));
return identity;
}
}
}#region配置标识服务.AddDefaultIdentity(选项=> { options.SignIn.RequireConfirmedAccount = true;options.Stores.MaxLengthForKeys = 256;//最大键长度)。如果更改此}) .AddEntityFrameworkStores() .AddDefaultUI() .AddDefaultTokenProviders() .AddClaimsPrincipalFactory();services.Configure(options => { //密码设置),则重新生成迁移。options.Password.RequireDigit = true;options.Password.RequireLowercase = true;options.Password.RequireNonAlphanumeric = true;options.Password.RequireUppercase = true;options.Password.RequiredLength = 6;options.Password.RequiredUniqueChars = 1;//锁定设置。options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);options.Lockout.MaxFailedAccessAttempts = 5;options.Lockout.AllowedForNewUsers = true;// User设置。"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";options.User.RequireUniqueEmail = false;};services.ConfigureApplicationCookie(options => { // Cookie设置options.Cookie.HttpOnly = true;options.ExpireTimeSpan = TimeSpan.FromMinutes(5);options.LoginPath = "/Identity/Account/Login";options.AccessDeniedPath = "/Identity/Account/AccessDenied";options.SlidingExpiration = true;});#endregion配置标识
https://stackoverflow.com/questions/65885452
复制相似问题