개발 slecs

파트너 채널 초대 링크 가입 경로 통제 기능 구현

목차

파트너 초대 토큰 기능 추가 및 관련 UI/쿼리 업데이트

파트너 초대 토큰 기능 추가 및 관련 UI/쿼리 업데이트 기능을 구현했음.

배경

신규 채널 사용자 등록 시 초대 링크 방식을 도입했음. 무작위 가입을 막고 상위 채널이 하위를 직접 초대하는 구조를 만들었음.

구현 방식

초대 토큰을 생성해서 링크에 포함하고, 가입 시 토큰을 검증했음. 토큰은 7일 만료, 1회 사용 후 무효화했음.

코드 예시

// 토큰 생성
public String createInviteToken(Long issuerId) {
    String token = UUID.randomUUID().toString().replace("-", "");
    InviteToken it = InviteToken.builder()
        .issuerId(issuerId)
        .token(token)
        .expiresAt(LocalDateTime.now().plusDays(7))
        .used(false)
        .build();
    inviteRepo.save(it);
    return token;
}

// 가입 시 검증
public void register(String token, UserInfo info) {
    InviteToken invite = inviteRepo.findByToken(token)
        .filter(t -> !t.isUsed())
        .filter(t -> t.getExpiresAt().isAfter(LocalDateTime.now()))
        .orElseThrow(() -> new InvalidTokenException("유효하지 않은 초대 링크"));

    createUser(info, invite.getIssuerId());
    invite.markUsed();
    inviteRepo.save(invite);
}

검토 포인트

토큰 만료와 사용 여부 체크는 둘 다 필요함. 만료 체크만 하면 이미 사용된 토큰을 재사용할 수 있고, 사용 여부만 체크하면 만료 없이 무한히 유효한 토큰이 생김.

정리

초대 링크 기반으로 채널 사용자가 통제되어 무분별한 가입을 막을 수 있게 됐음. 가입 경로도 추적 가능해짐.

다음

댓글 0

첫 댓글 달아줘.