【发布时间】:2020-10-07 06:16:20
【问题描述】:
我正在尝试将身份用户与 SingalR 集成。至此,就连接到集线器,授权成功。 问题是我可以让它与组一起工作,但尽管授权工作,我不能直接由用户发送。我也尝试了电子邮件而不是用户唯一标识符,但结果是一样的。会喜欢你的意见。 谢谢。
智威汤逊:
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
if (!string.IsNullOrEmpty(accessToken) &&(context.Request.Path.StartsWithSegments("/feed/get")))
{
context.Token = context.Request.Query["access_token"];
}
return Task.CompletedTask;
}
};
Startup.cs
app.UseEndpoints(route =>
{
route.MapHub<ActivityHub>("/feed/Get");
});
集线器
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class ActivityHub : Hub
{
IAuthService AuthService;
public ActivityHub(IAuthService authService)
{
AuthService = authService;
}
public override async Task OnConnectedAsync()
{
var user = await AuthService.GetUserByNameAsync(Context.User.Identity.Name);
await Clients.User(user.Id).SendAsync("receiveMessage", "Hello user"); //this doesn't get recived on client
await Groups.AddToGroupAsync(Context.ConnectionId, user.Id);
await Clients.Group(user.Id).SendAsync("receiveMessage", "Hello group!");//this works
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
}
}
}
【问题讨论】:
-
我建议使用组方法,在连接时将用户添加到组中,即使您创建单个用户组,Microsoft 实际上也建议这样做。如果你不想这样,那么我希望有人能帮助你解决你的问题。
-
谢谢,我想我会这样做的。
标签: c# asp.net-core .net-core signalr