Forráskód Böngészése

😎优化signarl连接时获取当前用户信息流程

zuohuaijun 1 éve
szülő
commit
7ffc89a5a7

+ 10 - 11
Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs

@@ -17,7 +17,6 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
 {
     private const string GROUP_ONLINE = "GROUP_ONLINE_"; // 租户分组前缀
 
-    private readonly UserManager _userManager;
     private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;
     private readonly SysMessageService _sysMessageService;
     private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _onlineUserHubContext;
@@ -28,15 +27,13 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
         SysMessageService sysMessageService,
         IHubContext<OnlineUserHub, IOnlineUserHub> onlineUserHubContext,
         SysCacheService sysCacheService,
-        SysConfigService sysConfigService,
-        UserManager userManager)
+        SysConfigService sysConfigService)
     {
         _sysOnlineUerRep = sysOnlineUerRep;
         _sysMessageService = sysMessageService;
         _onlineUserHubContext = onlineUserHubContext;
         _sysCacheService = sysCacheService;
         _sysConfigService = sysConfigService;
-        _userManager = userManager;
     }
 
     /// <summary>
@@ -45,21 +42,23 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
     /// <returns></returns>
     public override async Task OnConnectedAsync()
     {
-        if (_userManager == null || _userManager.UserId == 0)
-            return;
-
         var httpContext = Context.GetHttpContext();
+        var userId = (httpContext.User.FindFirst(ClaimConst.UserId)?.Value).ToLong();
+        var account = httpContext.User.FindFirst(ClaimConst.Account)?.Value;
+        var realName = httpContext.User.FindFirst(ClaimConst.RealName)?.Value;
+        var tenantId = (httpContext.User.FindFirst(ClaimConst.TenantId)?.Value).ToLong();
+
         var user = new SysOnlineUser
         {
             ConnectionId = Context.ConnectionId,
-            UserId = _userManager.UserId,
-            UserName = _userManager.Account,
-            RealName = _userManager.RealName,
+            UserId = userId,
+            UserName = account,
+            RealName = realName,
             Time = DateTime.Now,
             Ip = httpContext.GetRemoteIpAddressToIPv4(true),
             Browser = httpContext.GetClientBrowser(),
             Os = httpContext.GetClientOs(),
-            TenantId = _userManager.TenantId,
+            TenantId = tenantId,
         };
         await _sysOnlineUerRep.InsertAsync(user);
 

+ 0 - 17
Admin.NET/Admin.NET.Core/Hub/UserIdProvider.cs

@@ -1,17 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-using Microsoft.AspNetCore.SignalR;
-
-namespace Admin.NET.Core;
-
-public interface UserIdProvider : IUserIdProvider
-{
-    public new string GetUserId(HubConnectionContext connection)
-    {
-        return connection.User?.Claims?.FirstOrDefault(u => u.Type == ClaimConst.UserId)?.Value;
-    }
-}

+ 0 - 1
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -182,7 +182,6 @@ public class Startup : AppStartup
         services.AddViewEngine();
 
         // 即时通讯
-        //services.AddSingleton<IUserIdProvider, UserIdProvider>();
         services.AddSignalR(options =>
         {
             options.KeepAliveInterval = TimeSpan.FromSeconds(5);