问题描述
我使用Visual Studio模板为Asp.Net Core + Angular(10)创建了一个应用程序。我还搭建了Identity,使用了IdentityServer4,并向CustomName
添加了一个新的ApplicationUser
字段,然后我可以使用该字段向用户打招呼。
但是事实是,当我登录并更新自定义名称时,在Angular端看不到用户对象的那些更改。直到注销并再次登录。
public class ProfileService : IProfileService
{
private readonly IUserClaimsPrincipalFactory<ApplicationUser> _claimsFactory;
private readonly UserManager<ApplicationUser> _userManager;
public ProfileService(UserManager<ApplicationUser> userManager,IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory)
{
_userManager = userManager;
_claimsFactory = claimsFactory;
}
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var sub = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(sub);
var principal = await _claimsFactory.CreateAsync(user);
var claims = principal.Claims.ToList();
claims = claims.Where(claim => context.RequestedClaimTypes.Contains(claim.Type)).ToList();
// Add custom claims in token here based on user properties or any other source
claims.Add(new Claim("customName",user.CustomName));
context.IssuedClaims = claims;
}
public async Task IsActiveAsync(IsActiveContext context)
{
var sub = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(sub);
context.IsActive = user != null;
}
}
并在Startup.cs
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser,ApplicationDbContext>()
.AddProfileService<ProfileService>();
这是更新配置文件:
user.CustomName = Input.CustomName;
await _userManager.UpdateAsync(user);
await _signInManager.RefreshSignInAsync(user);
StatusMessage = "Your profile has been updated";
return RedirectToPage();
据我了解,这种方法将数据添加到JWT。而且JWT是不可变的。 除了将其放入JWT之外,我还能做什么?
或者当我在Angular端调用authorizeService.getUser()
时是否有获取刷新数据的方法?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)