|
|
@ -7,20 +7,24 @@ using System.Threading.Tasks; |
|
|
using Volo.Abp.Auditing; |
|
|
using Volo.Abp.Auditing; |
|
|
using Volo.Abp.Domain.Services; |
|
|
using Volo.Abp.Domain.Services; |
|
|
using Volo.Abp.Identity; |
|
|
using Volo.Abp.Identity; |
|
|
|
|
|
using Volo.Abp.Timing; |
|
|
|
|
|
|
|
|
namespace LINGYUN.Abp.Identity.Session; |
|
|
namespace LINGYUN.Abp.Identity.Session; |
|
|
public class IdentitySessionManager : DomainService, IIdentitySessionManager |
|
|
public class IdentitySessionManager : DomainService, IIdentitySessionManager |
|
|
{ |
|
|
{ |
|
|
protected IDeviceInfoProvider DeviceInfoProvider { get; } |
|
|
protected IDeviceInfoProvider DeviceInfoProvider { get; } |
|
|
|
|
|
protected IIdentitySessionCache IdentitySessionCache { get; } |
|
|
protected IIdentitySessionStore IdentitySessionStore { get; } |
|
|
protected IIdentitySessionStore IdentitySessionStore { get; } |
|
|
protected IdentityDynamicClaimsPrincipalContributorCache IdentityDynamicClaimsPrincipalContributorCache { get; } |
|
|
protected IdentityDynamicClaimsPrincipalContributorCache IdentityDynamicClaimsPrincipalContributorCache { get; } |
|
|
|
|
|
|
|
|
public IdentitySessionManager( |
|
|
public IdentitySessionManager( |
|
|
IDeviceInfoProvider deviceInfoProvider, |
|
|
IDeviceInfoProvider deviceInfoProvider, |
|
|
|
|
|
IIdentitySessionCache identitySessionCache, |
|
|
IIdentitySessionStore identitySessionStore, |
|
|
IIdentitySessionStore identitySessionStore, |
|
|
IdentityDynamicClaimsPrincipalContributorCache identityDynamicClaimsPrincipalContributorCache) |
|
|
IdentityDynamicClaimsPrincipalContributorCache identityDynamicClaimsPrincipalContributorCache) |
|
|
{ |
|
|
{ |
|
|
DeviceInfoProvider = deviceInfoProvider; |
|
|
DeviceInfoProvider = deviceInfoProvider; |
|
|
|
|
|
IdentitySessionCache = identitySessionCache; |
|
|
IdentitySessionStore = identitySessionStore; |
|
|
IdentitySessionStore = identitySessionStore; |
|
|
IdentityDynamicClaimsPrincipalContributorCache = identityDynamicClaimsPrincipalContributorCache; |
|
|
IdentityDynamicClaimsPrincipalContributorCache = identityDynamicClaimsPrincipalContributorCache; |
|
|
} |
|
|
} |
|
|
@ -33,6 +37,10 @@ public class IdentitySessionManager : DomainService, IIdentitySessionManager |
|
|
if (claimsPrincipal != null) |
|
|
if (claimsPrincipal != null) |
|
|
{ |
|
|
{ |
|
|
var userId = claimsPrincipal.FindUserId(); |
|
|
var userId = claimsPrincipal.FindUserId(); |
|
|
|
|
|
var tenantId = claimsPrincipal.FindTenantId(); |
|
|
|
|
|
|
|
|
|
|
|
using (CurrentTenant.Change(tenantId)) |
|
|
|
|
|
{ |
|
|
var sessionId = claimsPrincipal.FindSessionId(); |
|
|
var sessionId = claimsPrincipal.FindSessionId(); |
|
|
if (!userId.HasValue || sessionId.IsNullOrWhiteSpace()) |
|
|
if (!userId.HasValue || sessionId.IsNullOrWhiteSpace()) |
|
|
{ |
|
|
{ |
|
|
@ -48,7 +56,6 @@ public class IdentitySessionManager : DomainService, IIdentitySessionManager |
|
|
var deviceDesc = deviceInfo.Description; |
|
|
var deviceDesc = deviceInfo.Description; |
|
|
var clientIpAddress = deviceInfo.ClientIpAddress; |
|
|
var clientIpAddress = deviceInfo.ClientIpAddress; |
|
|
|
|
|
|
|
|
var tenantId = claimsPrincipal.FindTenantId(); |
|
|
|
|
|
var clientId = claimsPrincipal.FindClientId(); |
|
|
var clientId = claimsPrincipal.FindClientId(); |
|
|
|
|
|
|
|
|
Logger.LogDebug($"Save user session for user: {userId}, session: {sessionId}"); |
|
|
Logger.LogDebug($"Save user session for user: {userId}, session: {sessionId}"); |
|
|
@ -60,11 +67,26 @@ public class IdentitySessionManager : DomainService, IIdentitySessionManager |
|
|
userId.Value, |
|
|
userId.Value, |
|
|
clientId, |
|
|
clientId, |
|
|
clientIpAddress, |
|
|
clientIpAddress, |
|
|
|
|
|
Clock.Now, |
|
|
|
|
|
Clock.Now, |
|
|
tenantId, |
|
|
tenantId, |
|
|
cancellationToken); |
|
|
cancellationToken); |
|
|
|
|
|
|
|
|
Logger.LogDebug($"Remove dynamic claims cache for user: {userId}"); |
|
|
Logger.LogDebug($"Remove dynamic claims cache for user: {userId}"); |
|
|
|
|
|
|
|
|
await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(userId.Value, tenantId); |
|
|
await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(userId.Value, tenantId); |
|
|
|
|
|
|
|
|
|
|
|
await IdentitySessionCache.RefreshAsync(sessionId, |
|
|
|
|
|
new IdentitySessionCacheItem( |
|
|
|
|
|
device, |
|
|
|
|
|
deviceDesc, |
|
|
|
|
|
userId.Value, |
|
|
|
|
|
sessionId, |
|
|
|
|
|
clientId, |
|
|
|
|
|
clientIpAddress, |
|
|
|
|
|
Clock.Now, |
|
|
|
|
|
Clock.Now)); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|