我想我在这里遗漏了一些东西,因为这不应该那么困难。
我有一个使用有效身份验证的 nancy IIS 托管应用程序(设置 cookie _nca)。然后我有一个 signalR 集线器,它需要获取登录人的用户名,这样我就可以拉出用户所属的“组”。
我以为我会从 Context.User.Identity.Name 中获取用户名,但那是空的,集线器似乎认为我没有被授权。我猜我还需要做其他事情来告诉 signalR 如何进行身份验证。
我认为也许设置 HttpContext.Current.User 会有所帮助,但这显然也没有做任何事情。
我通过以下方式做到了这一点
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.AfterRequest.AddItemToStartOfPipeline(SetUpContext);
//pipelines.AfterRequest.AddItemToEndOfPipeline(SetUpContext);
CookieBasedSessions.Enable(pipelines);
RouteTable.Routes.MapHubs();
}
private void SetUpContext(NancyContext ctx)
{
if (ctx.CurrentUser == null)
return;
string[] Roles = { "Recipient" };
var userIdent = new UserIdent();
userIdent.IsAuthenticated = true;
userIdent.Name = ctx.CurrentUser.UserName;
GenericPrincipal principal = new GenericPrincipal(userIdent, Roles);
IPrincipal Identity = (IPrincipal)principal;
HttpContext.Current.User = Identity;
}
我还尝试了 pipelines.BeforeRequest.AddItemToEndOfPipeline。仍然没有任何运气。