Asp.Net Core +具有身份的Angular模板更新用户个人资料不会更新前端

问题描述

我使用Visual Studio模板为Asp.Net Core + Angular(10)创建了一个应用程序。我还搭建了Identity,使用了IdentityServer4,并向CustomName添加一个新的ApplicationUser字段,然后我可以使用该字段向用户打招呼。

Custom name shown in the header

但是事实是,当我登录并更新自定义名称时,在Angular端看不到用户对象的那些更改。直到注销并再次登录

Updated my name

我没有放入第三张图片,但与第一张图片完全相同。

我使用ProfileService为声明添加自定义名称

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 (将#修改为@)