From 781d8ead94d672ff730642d1ff479bf1d7bc5536 Mon Sep 17 00:00:00 2001 From: Jonathan Bourdon Date: Wed, 23 Apr 2025 18:52:17 -0400 Subject: [PATCH] Fix issue with new users --- .../Users/Handlers/LoginWithGoogle.cs | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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); } }