add refresh tokens
All checks were successful
Build and Deploy API / build-and-deploy (push) Successful in 9s
All checks were successful
Build and Deploy API / build-and-deploy (push) Successful in 9s
This commit is contained in:
@@ -51,9 +51,18 @@ public class AuthController : ControllerBase {
|
||||
|
||||
if(!result.Succeeded) return Unauthorized();
|
||||
|
||||
var token = jwt_.GenerateJwt(user);
|
||||
var accessToken = jwt_.GenerateJwt(user);
|
||||
var refreshToken = jwt_.GenerateRefreshToken();
|
||||
RefreshToken newTokenObject = new RefreshToken {
|
||||
Token = refreshToken,
|
||||
UserId = user.Id,
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
ExpiresAt = DateTime.UtcNow.AddDays(30),
|
||||
IsRevoked = false
|
||||
};
|
||||
await jwt_.AddRefreshToken(newTokenObject);
|
||||
|
||||
return Ok(new { token });
|
||||
return Ok(new { accessToken, refreshToken });
|
||||
}
|
||||
|
||||
[Authorize] // authorize is handled by middleware
|
||||
@@ -65,6 +74,37 @@ public class AuthController : ControllerBase {
|
||||
return Ok();
|
||||
}
|
||||
|
||||
[HttpPost("refresh")] // allow-anonymous by default
|
||||
public async Task<ActionResult> Refresh(TokenDto request) {
|
||||
|
||||
RefreshToken? storedToken = await jwt_.GetRefreshToken(request.RefreshToken);
|
||||
if (storedToken == null) return Unauthorized();
|
||||
bool valid = (storedToken.IsRevoked) ||
|
||||
(storedToken.ExpiresAt < DateTime.UtcNow);
|
||||
if(!valid) return Unauthorized(); // TODO: delete the invalid token
|
||||
|
||||
User? user = await jwt_.GetUser(storedToken.UserId);
|
||||
if(user == null) return NotFound();
|
||||
string? newAccessToken = jwt_.GenerateJwt(user);
|
||||
if(newAccessToken == null) return NotFound();
|
||||
string newRefreshToken = jwt_.GenerateRefreshToken();
|
||||
|
||||
storedToken.IsRevoked = true;
|
||||
RefreshToken newTokenObject = new RefreshToken {
|
||||
Token = newRefreshToken,
|
||||
UserId = storedToken.UserId,
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
ExpiresAt = DateTime.UtcNow.AddDays(30),
|
||||
IsRevoked = false
|
||||
};
|
||||
|
||||
await jwt_.AddRefreshToken(newTokenObject);
|
||||
|
||||
return Ok(new { accessToken = newAccessToken, refreshToken = newRefreshToken });
|
||||
|
||||
|
||||
}
|
||||
|
||||
// TODO
|
||||
// refresh tokens
|
||||
// email verification
|
||||
|
||||
Reference in New Issue
Block a user