Skip to content

Commit 05bfbc9

Browse files
authored
Merge pull request #20 from barzin144/bugfix/handel-invalid-refresh-token
handled invalid refresh token
2 parents cd338cc + 297e42e commit 05bfbc9

File tree

3 files changed

+27
-21
lines changed

3 files changed

+27
-21
lines changed

DataAccess/UserRepository.cs

+1-5
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,7 @@ public async Task<bool> DeleteTokensWithSameRefreshTokenSourceAsync(string refre
113113
string refreshTokenHash = _securityService.GetSha256Hash(refreshToken);
114114
FilterDefinition<User> filter = new FilterDefinitionBuilder<User>().Eq($"{nameof(User.Tokens)}.{nameof(Token.RefreshTokenIdHash)}", refreshTokenHash);
115115

116-
User user = await collection.Find(filter).FirstOrDefaultAsync();
117-
if (user == null)
118-
{
119-
throw new Exception("Invalid refresh token");
120-
}
116+
User user = await collection.Find(filter).FirstOrDefaultAsync() ?? throw new Exception("Invalid refresh token");
121117
return (user.Tokens.Where(x => x.RefreshTokenIdHash == refreshTokenHash).FirstOrDefault(), user);
122118
}
123119
catch

Service/JwtTokenService.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,15 @@ public async Task RevokeUserBearerTokensAsync(string userId, string refreshToken
205205
{
206206
throw new Exception("Invalid refresh token");
207207
}
208-
string refreshTokenSerial = GetRefreshTokenSerial(refreshToken);
209-
if (string.IsNullOrWhiteSpace(refreshTokenSerial))
208+
try
209+
{
210+
string refreshTokenSerial = GetRefreshTokenSerial(refreshToken);
211+
return await _userService.FindUserAndTokenByRefreshTokenAsync(refreshTokenSerial);
212+
}
213+
catch
210214
{
211215
throw new Exception("Invalid refresh token");
212216
}
213-
return await _userService.FindUserAndTokenByRefreshTokenAsync(refreshTokenSerial);
214217
}
215218
}
216219
}

WebApi/Controllers/AuthController.cs

+20-13
Original file line numberDiff line numberDiff line change
@@ -224,23 +224,30 @@ public async Task<IActionResult> RefreshToken([FromBody] RefreshTokenViewModel m
224224
return BadRequest("refreshToken is not set.");
225225
}
226226

227-
(Token token, User user) = await _jwtTokenService.FindUserAndTokenByRefreshTokenAsync(refreshToken);
228-
if (token == null)
227+
try
229228
{
230-
return Unauthorized();
231-
}
229+
(Token token, User user) = await _jwtTokenService.FindUserAndTokenByRefreshTokenAsync(refreshToken);
230+
if (token == null)
231+
{
232+
return Unauthorized();
233+
}
232234

233-
var result = _jwtTokenService.CreateJwtTokens(user);
234-
await _jwtTokenService.AddUserTokenAsync(user, result.RefreshTokenSerial, result.AccessToken, _jwtTokenService.GetRefreshTokenSerial(refreshToken));
235+
var result = _jwtTokenService.CreateJwtTokens(user);
236+
await _jwtTokenService.AddUserTokenAsync(user, result.RefreshTokenSerial, result.AccessToken, _jwtTokenService.GetRefreshTokenSerial(refreshToken));
235237

236-
return Ok(new AuthResponseViewModel
238+
return Ok(new AuthResponseViewModel
239+
{
240+
AccessToken = result.AccessToken,
241+
RefreshToken = result.RefreshToken,
242+
Email = user.Email,
243+
Name = user.Name,
244+
Provider = user.Provider.ToString()
245+
});
246+
}
247+
catch
237248
{
238-
AccessToken = result.AccessToken,
239-
RefreshToken = result.RefreshToken,
240-
Email = user.Email,
241-
Name = user.Name,
242-
Provider = user.Provider.ToString()
243-
});
249+
return BadRequest("Invalid refresh token.");
250+
}
244251
}
245252

246253
[HttpPost("logout")]

0 commit comments

Comments
 (0)