diff --git a/backend/src/Web/Features/Users/Handlers/LoginWithGoogle.cs b/backend/src/Web/Features/Users/Handlers/LoginWithGoogle.cs index b9cce4e..1ba8f6d 100644 --- a/backend/src/Web/Features/Users/Handlers/LoginWithGoogle.cs +++ b/backend/src/Web/Features/Users/Handlers/LoginWithGoogle.cs @@ -93,6 +93,7 @@ public class LoginWithGoogleHandler( if (user is null) { var generatedPassword = PasswordGenerator.Next(); + var refreshToken = RefreshTokenGenerator.Next(); var generatedUser = new IdentityUser { UserName = userInfo.Email, @@ -102,6 +103,8 @@ public class LoginWithGoogleHandler( Alias = userInfo.Name, PortraitUrl = userInfo.Picture, GoogleId = userInfo.Id, + RefreshToken = refreshToken, + RefreshTokenExpiryTime = DateTime.UtcNow.Add(jwtOptions.Value.RefreshTokenLifetime) }; var result = await userManager.CreateAsync( @@ -122,13 +125,14 @@ public class LoginWithGoogleHandler( await signInManager.SignInAsync(user, isPersistent: false); - // Generate refresh token - var refreshToken = RefreshTokenGenerator.Next(); - - // Store refresh token in user's properties - user.RefreshToken = refreshToken; - user.RefreshTokenExpiryTime = DateTime.UtcNow.Add(jwtOptions.Value.RefreshTokenLifetime); - await userManager.UpdateAsync(user); + // Generate refresh token for existing users + if (user.RefreshToken == null) + { + var refreshToken = RefreshTokenGenerator.Next(); + user.RefreshToken = refreshToken; + user.RefreshTokenExpiryTime = DateTime.UtcNow.Add(jwtOptions.Value.RefreshTokenLifetime); + await userManager.UpdateAsync(user); + } var accessToken = JwtTokenHelper.GenerateJwtToken( expiresIn: jwtOptions.Value.Lifetime, @@ -143,7 +147,7 @@ public class LoginWithGoogleHandler( portraitUrl: user.PortraitUrl); await SendOkAsync( - new LoginWithGoogleResponse(accessToken, refreshToken), + new LoginWithGoogleResponse(accessToken, user.RefreshToken), cancellation: ct); } }