Skip to content

Commit 71b3cec

Browse files
committed
fix: guest user 로그인 개선
1 parent 113ff3d commit 71b3cec

File tree

6 files changed

+30
-5
lines changed

6 files changed

+30
-5
lines changed

ProjectVG.Application/Services/Auth/AuthService.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public async Task<AuthResult> LoginWithOAuthAsync(string provider, string provid
3939

4040
if (user == null)
4141
{
42-
string uuid = providerUserId.Substring(0, Math.Min(providerUserId.Length, 20));
4342
// 새로운 게스트 사용자 생성
43+
string uuid = GenerateGuestUuid(providerUserId);
4444
var createCommand = new UserCreateCommand(
4545
Username: $"guest_{uuid}",
4646
Email: $"guest@guest{uuid}.local",
@@ -139,5 +139,14 @@ public async Task<bool> LogoutAsync(string refreshToken)
139139
}
140140
return revoked;
141141
}
142+
143+
private static string GenerateGuestUuid(string providerUserId)
144+
{
145+
// SHA256 해시를 사용하여 일관된 UUID 생성
146+
using var sha256 = System.Security.Cryptography.SHA256.Create();
147+
var hash = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(providerUserId));
148+
var hashString = Convert.ToHexString(hash);
149+
return hashString.Substring(0, Math.Min(hashString.Length, 16)).ToLowerInvariant();
150+
}
142151
}
143152
}

ProjectVG.Application/Services/User/IUserService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public interface IUserService
1010
Task<UserDto?> TryGetByIdAsync(Guid userId);
1111
Task<UserDto?> TryGetByUidAsync(string uid);
1212
Task<UserDto?> TryGetByUsernameAsync(string username);
13+
Task<UserDto?> TryGetByEmailAsync(string email);
1314
Task<UserDto?> TryGetByProviderAsync(string provider, string providerId);
1415

1516
Task<bool> ExistsByIdAsync(Guid userId);

ProjectVG.Application/Services/User/UserService.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,15 @@ public async Task<bool> DeleteUserAsync(Guid userId)
7373
return user is null ? null : new UserDto(user);
7474
}
7575

76+
public async Task<UserDto?> TryGetByEmailAsync(string email)
77+
{
78+
var user = await _userRepository.GetByEmailAsync(email);
79+
return user is null ? null : new UserDto(user);
80+
}
81+
7682
public async Task<UserDto?> TryGetByProviderAsync(string provider, string providerId)
7783
{
78-
var users = await _userRepository.GetAllAsync();
79-
var user = users.FirstOrDefault(u => u.Provider == provider && u.ProviderId == providerId);
84+
var user = await _userRepository.GetByProviderAsync(provider, providerId);
8085
return user is null ? null : new UserDto(user);
8186
}
8287

ProjectVG.Infrastructure/Persistence/Repositories/User/IUserRepository.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public interface IUserRepository
99
Task<User?> GetByUsernameAsync(string username);
1010
Task<User?> GetByEmailAsync(string email);
1111
Task<User?> GetByProviderIdAsync(string providerId);
12+
Task<User?> GetByProviderAsync(string provider, string providerId);
1213
Task<User?> GetByUIDAsync(string uid);
1314
Task<User> CreateAsync(User user);
1415
Task<User> UpdateAsync(User user);

ProjectVG.Infrastructure/Persistence/Repositories/User/SqlServerUserRepository.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ public async Task<IEnumerable<User>> GetAllAsync()
4646
return await _context.Users.FirstOrDefaultAsync(u => u.ProviderId == providerId && u.Status != AccountStatus.Deleted);
4747
}
4848

49+
public async Task<User?> GetByProviderAsync(string provider, string providerId)
50+
{
51+
return await _context.Users.FirstOrDefaultAsync(u => u.Provider == provider && u.ProviderId == providerId && u.Status != AccountStatus.Deleted);
52+
}
53+
4954
public async Task<User?> GetByUIDAsync(string uid)
5055
{
5156
return await _context.Users.FirstOrDefaultAsync(u => u.UID == uid && u.Status != AccountStatus.Deleted);

ProjectVG.Tests/Services/Chat/Factories/ChatLLMFormatTests.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public ChatLLMFormatTests()
1515
{
1616
_format = new ChatLLMFormat();
1717

18-
var character = new CharacterDto
18+
var characterEntity = new ProjectVG.Domain.Entities.Characters.Character
1919
{
2020
Id = Guid.NewGuid(),
2121
Name = "TestCharacter",
@@ -24,8 +24,12 @@ public ChatLLMFormatTests()
2424
Personality = "Friendly and helpful",
2525
SpeechStyle = "Casual",
2626
Summary = "Character summary for testing",
27-
VoiceId = "test-voice"
27+
VoiceId = "test-voice",
28+
IsActive = true,
29+
UserAlias = "TestUser"
2830
};
31+
32+
var character = new CharacterDto(characterEntity);
2933

3034
var command = new ChatRequestCommand(
3135
Guid.NewGuid(),

0 commit comments

Comments
 (0)