|
|
|
@@ -36,7 +36,8 @@ public class AuthService {
|
|
|
|
|
private final RedisTemplate<String, Object> redisTemplate;
|
|
|
|
|
|
|
|
|
|
private static final String SESSION_PREFIX = "session:";
|
|
|
|
|
private static final Duration SESSION_TTL = Duration.ofMinutes(60);
|
|
|
|
|
private static final Duration SESSION_TTL = Duration.ofMinutes(60); // 일반 세션
|
|
|
|
|
private static final Duration REMEMBER_TTL = Duration.ofDays(30); // 자동 로그인(로그인 상태 유지)
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public MemberResponse signup(SignupRequest req) {
|
|
|
|
@@ -68,13 +69,17 @@ public class AuthService {
|
|
|
|
|
throw new ApiException(HttpStatus.FORBIDDEN, "사용할 수 없는 계정입니다.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Duration ttl = req.isRememberMe() ? REMEMBER_TTL : SESSION_TTL;
|
|
|
|
|
SessionUser session = SessionUser.from(member);
|
|
|
|
|
session.setRememberMe(req.isRememberMe());
|
|
|
|
|
|
|
|
|
|
String token = UUID.randomUUID().toString().replace("-", "");
|
|
|
|
|
redisTemplate.opsForValue().set(SESSION_PREFIX + token, SessionUser.from(member), SESSION_TTL);
|
|
|
|
|
log.info("[login] {} (token issued)", member.getLoginId());
|
|
|
|
|
redisTemplate.opsForValue().set(SESSION_PREFIX + token, session, ttl);
|
|
|
|
|
log.info("[login] {} (token issued, rememberMe={})", member.getLoginId(), req.isRememberMe());
|
|
|
|
|
|
|
|
|
|
return LoginResponse.builder()
|
|
|
|
|
.token(token)
|
|
|
|
|
.expiresInSeconds(SESSION_TTL.getSeconds())
|
|
|
|
|
.expiresInSeconds(ttl.getSeconds())
|
|
|
|
|
.member(MemberResponse.from(member))
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
@@ -89,7 +94,8 @@ public class AuthService {
|
|
|
|
|
String key = SESSION_PREFIX + token;
|
|
|
|
|
Object cached = redisTemplate.opsForValue().get(key);
|
|
|
|
|
if (cached instanceof SessionUser user) {
|
|
|
|
|
redisTemplate.expire(key, SESSION_TTL);
|
|
|
|
|
// 슬라이딩 만료: 자동 로그인 세션이면 길게(30일), 아니면 60분으로 갱신
|
|
|
|
|
redisTemplate.expire(key, user.isRememberMe() ? REMEMBER_TTL : SESSION_TTL);
|
|
|
|
|
return user;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|