🐛 Fix logout session

This commit is contained in:
2025-08-18 17:52:06 +08:00
parent 32e91da0b2
commit 2cea391ebf

View File

@@ -449,8 +449,7 @@ public class AccountService(
public async Task<AuthClient> UpdateDeviceName(Account account, string deviceId, string label) public async Task<AuthClient> UpdateDeviceName(Account account, string deviceId, string label)
{ {
var device = await db.AuthClients.FirstOrDefaultAsync( var device = await db.AuthClients.FirstOrDefaultAsync(c => c.DeviceId == deviceId && c.AccountId == account.Id
c => c.DeviceId == deviceId && c.AccountId == account.Id
); );
if (device is null) throw new InvalidOperationException("Device was not found."); if (device is null) throw new InvalidOperationException("Device was not found.");
@@ -470,16 +469,11 @@ public class AccountService(
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
if (session is null) throw new InvalidOperationException("Session was not found."); if (session is null) throw new InvalidOperationException("Session was not found.");
var sessions = await db.AuthSessions
.Include(s => s.Challenge)
.Where(s => s.AccountId == session.Id && s.Challenge.DeviceId == session.Challenge.DeviceId)
.ToListAsync();
if (session.Challenge.ClientId.HasValue) if (session.Challenge.ClientId.HasValue)
{ {
if (!await IsDeviceActive(session.Challenge.ClientId.Value)) if (!await IsDeviceActive(session.Challenge.ClientId.Value))
await pusher.UnsubscribePushNotificationsAsync(new UnsubscribePushNotificationsRequest() await pusher.UnsubscribePushNotificationsAsync(new UnsubscribePushNotificationsRequest()
{ DeviceId = session.Challenge.Client!.DeviceId } { DeviceId = session.Challenge.Client!.DeviceId }
); );
} }
@@ -489,14 +483,12 @@ public class AccountService(
.Where(s => s.Challenge.DeviceId == session.Challenge.DeviceId) .Where(s => s.Challenge.DeviceId == session.Challenge.DeviceId)
.ExecuteDeleteAsync(); .ExecuteDeleteAsync();
foreach (var item in sessions) await cache.RemoveAsync($"{AuthService.AuthCachePrefix}{session.Id}");
await cache.RemoveAsync($"{AuthService.AuthCachePrefix}{item.Id}");
} }
public async Task DeleteDevice(Account account, string deviceId) public async Task DeleteDevice(Account account, string deviceId)
{ {
var device = await db.AuthClients.FirstOrDefaultAsync( var device = await db.AuthClients.FirstOrDefaultAsync(c => c.DeviceId == deviceId && c.AccountId == account.Id
c => c.DeviceId == deviceId && c.AccountId == account.Id
); );
if (device is null) if (device is null)
throw new InvalidOperationException("Device not found."); throw new InvalidOperationException("Device not found.");
@@ -689,4 +681,4 @@ public class AccountService(
await db.BulkInsertAsync(newProfiles); await db.BulkInsertAsync(newProfiles);
} }
} }
} }