feat: 자동 로그인(로그인 상태 유지) - rememberMe 시 세션 30일
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f55d998803
commit
9ad6a91a56
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user