Blazor Web 程序集在每个请求中发送数据
Posted
技术标签:
【中文标题】Blazor Web 程序集在每个请求中发送数据【英文标题】:Blazor web assembly send data in every request 【发布时间】:2021-07-31 12:30:48 【问题描述】:我正在使用 Blazor Web 程序集和 IdentityServer4 创建一个应用程序。 当用户登录时,选择一家公司,我存储它(我已经有了这部分),但我需要与控制器共享该公司(检查权限和对数据的访问)。
我该怎么做,或者我应该在每个请求中发送所选公司和用户?
【问题讨论】:
您需要显示更多代码示例,以便我们可以为您提供具体帮助,预先通过显示客户端如何解析选择的代码来帮助您。通常,如果存储了个性化或其他以用户或帐户为中心的数据,则服务器应该能够根据经过身份验证的用户检索该信息。如果选择更短暂,例如您不想永久存储它,那么您可以通过每个请求的 HTTP 标头将其传递回服务器。许多应用程序结合使用这些技术。请将您的帖子重新聚焦于这些概念中的任何一个。 【参考方案1】:我对@987654321@ 做了类似的事情。您需要将公司信息添加为声明。
public class IdentityProfileService : IProfileService
private readonly IUserClaimsPrincipalFactory<ApplicationUser> _claimsFactory;
private readonly UserManager<ApplicationUser> _userManager;
public IdentityProfileService(IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory, UserManager<ApplicationUser> userManager)
_claimsFactory = claimsFactory;
_userManager = userManager;
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
var sub = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(sub);
if (user == null)
throw new ArgumentException("User not found!",nameof(user));
var principal = await _claimsFactory.CreateAsync(user);
var claims = principal.Claims.ToList();
//Add more claims like this
//claims.Add(new System.Security.Claims.Claim("MyProfileID", user.Id));
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
var builder = services.AddIdentityServer(options =>
...
)
.AddConfigurationStore<ConfigurationDbContext>(options =>
...
)
.AddOperationalStore<PersistedGrantDbContext>(options =>
...
)
.AddAspNetIdentity<ApplicationUser>()
.AddProfileService<IdentityProfileService>(); // <=========
【讨论】:
谢谢!我一直在寻找这样的东西,但对其进行测试......它不适合我需要的东西(所以我认为),用户应该能够从一家公司更改为另一家公司(如果获得多个授权),所以他应该能够在运行时更改声明,我还没有找到这样做的方法(我不知道是否可能) @Raykler 您可以为执行此操作的用户添加多个声明和登录页面......以上是关于Blazor Web 程序集在每个请求中发送数据的主要内容,如果未能解决你的问题,请参考以下文章