如何解决Blazor 服务器在身份验证后添加声明
嗨,我希望用户在登录后选择要进入的分支,并且用户可能对每个分支具有不同的角色。然后此信息将添加到用户声明中。下面是我如何实现 IClaimsTransformation TransformAsync 方法。
public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
// Clone current identity
var clone = principal.Clone();
var newIdentity = (ClaimsIdentity)clone.Identity;
// Support AD and local accounts
var nameId = principal.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier ||
c.Type == ClaimTypes.Name);
if (nameId == null)
{
return principal;
}
// Get userInfo from database
UserBranchRoleModel userInfo = await Task.Run(() => _userService.GetCurrentBranchRole(nameId.Value));
if (userInfo?.User == null)
{
return principal;
}
List<Claim> claims = new()
{
new Claim(newIdentity.NameClaimType,userInfo.User.UserID),new Claim("BranchID",userInfo.Branch.BranchID.ToString()),new Claim("BranchName",userInfo.Branch.BranchName),new Claim(newIdentity.RoleClaimType,userInfo.Role.RoleID)
};
newIdentity.AddClaims(claims);
return clone;
}
问题是如果我不刷新页面,则声明不会更新。有没有办法在不完全刷新页面的情况下刷新声明?
这是我如何在索引页面中显示声明
@foreach (var c in @user.Claims)
{
<div>@c.Type: @c.Value</div>
}
这就是我更新数据库的方式
async Task changeBranch(string UserID)
{
DialogOptions options = new DialogOptions() { CloseButton = false };
DialogParameters parameters = new DialogParameters();
parameters.Add("UserID",UserID);
var dialog = DialogService.Show<ChooseBranch>("Select A Branch",parameters,options);
var result = await dialog.Result;
if (!result.Cancelled)
{
UserBranchRoleModel BranchRole = (UserBranchRoleModel)result.Data;
_user.SetCurrentBranchRole(BranchRole);
StateHasChanged();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。