/**
* Refresh 토큰을 생성한다
* 이때는 인증을 위한 정보는 유지하지 않고 유효기간을 auth-token의 5배로 잡았다.
* @return
*/public String createRefreshToken(){
return create(null, "refreshToken", expireMin * 5);
}
UserService
로그인 시 auth-token과 함께 refresh-token도 생성한다. 이 정보는 사용자 계정과 함께 DB에 저장되는게 맞지만 편의상 Map에서 관리한다.
public User signin(String email, String password){
if (email.equals("member@quietjun.xyz") && password.equals("1234")) {
// 인증 성공 시 authToken 생성StringauthToken= jwtUtil.createAuthToken(email);
// refresh token도 함께 생성한다.StringrefreshToken= jwtUtil.createRefreshToken();
// 계정 정보와 함께 refresh token을 저장한다 - 인증 정보는 저장되지 않는다.
saveRefreshToken(email, refreshToken);
return User.builder().email(email).authToken(authToken).refreshToken(refreshToken).build();
} else {
thrownewRuntimeException("그런 사람은 없어요~");
}
}
/**
* 사용자 인증 정보를 Map에 저장한다. 실제로는 DB에 저장할 것
*/
Map<String, String> refreshTokens = newHashMap<>();
/**
* 사용자의 토큰 정보 저장
*
* @param userId
* @param refreshToken
*/publicvoidsaveRefreshToken(String email, String refreshToken){
refreshTokens.put(email, refreshToken);
}
public String getRefreshToken(String email){
return refreshTokens.get(email);
}
추가로 logout 시 로그인 과정에서 저장한 refresh token 정보를 지워줘야할 책임도 생겼다.