如何解决Asp.Net Core +具有身份的Angular模板更新用户个人资料不会更新前端
我使用Visual Studio模板为Asp.Net Core + Angular(10)创建了一个应用程序。我还搭建了Identity,使用了IdentityServer4,并向CustomName
添加了一个新的ApplicationUser
字段,然后我可以使用该字段向用户打招呼。
但是事实是,当我登录并更新自定义名称时,在Angular端看不到用户对象的那些更改。直到注销并再次登录。
我没有放入第三张图片,但与第一张图片完全相同。
我使用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 举报,一经查实,本站将立刻删除。