비밀번호 재설정 1회용 이메일 링크
60
投稿した質問数 3
안녕하세요!
비밀번호 재설정 이메일의 링크를 클릭한 후 비밀번호를 변경했는데, 같은 링크로 다시 접속해도 계속 비밀번호가 변경되는 것을 확인했습니다.
재설정 링크를 1회 사용 후 만료되게 하려면 어떻게 해야하나요?
回答 1
1
안녕하세요 이정환입니다
결론부터 말씀드리면, 재설정 링크 자체는 이미 1회용으로 정상 소모되고 있습니다. 같은 링크로 계속 비밀번호가 변경되는 것처럼 보이는 건, 링크가 재사용되는 게 아니라 첫 클릭 때 발급된 로그인 세션이 브라우저에 그대로 남아있기 때문이에요.
Supabase 비밀번호 재설정 흐름을 단계별로 보면 이렇습니다.
1. resetPasswordForEmail() 호출 → 이메일 링크 발송
2. 링크 클릭 → Supabase가 토큰을 1회 검증하고 소모한 뒤, 그 대가로 세션(access / refresh token)을 발급해 브라우저(localStorage)에 저장
3. 앱에서 updateUser({ password }) 호출 → 이때 사용하는 건 링크가 아니라 "방금 발급된 세션"
즉, 비밀번호 변경은 링크가 아니라 로그인된 세션으로 처리됩니다. 그래서
- 링크의 토큰은 사실 이미 1회용으로 소모된 상태입니다 (재검증하면 만료/에러가 납니다)
- 그런데 첫 클릭으로 만들어진 세션은 브라우저에 계속 살아있습니다 (refresh token이 자동 갱신됨)
- 그 상태로 페이지에 다시 들어가면 "이미 로그인된 상태"라 updateUser가 또 동작 → 마치 "링크가 계속 통하는" 것처럼 보이는 거예요 만약 이 동작이 부자연스럽다고 느껴지신다면 비밀번호 변경 이후 강제로 SignOut 하는 동작을 만들어주시면 됩니다
0
선생님! 혹시 아래 코드처럼 변경해도 괜찮은건지 궁금합니다.
비밀번호 변경 -> 로그아웃 -> 로그인 페이지 이동
const { mutate: updatePassword, isPending: isUpdatePasswordPending } = useUpdatePassword({
onSuccess: async () => {
toast.info('비밀번호가 성공적으로 변경되었습니다.', { position: 'top-center' });
await signOut('global');
navigate('/sign-in');
},
onError: (error) => {
const message = generateErrorMessage(error);
toast.error(message, { position: 'top-center' });
setPassword('');
},
});
포스트 작성 중 이탈 방지 기능 (취소 버튼 클릭 시 오류)
0
53
2
"포스트 생성에 실패했습니다" 실패 문구와 함께 에러가 발생합니다ㅠㅠ
0
55
2
강의자료는 어떻게 제작하시나요?
0
64
2
강의 수강 후 포트폴리오 준비 방향에 대해 조언 부탁드립니다.
2
74
1
회원가입 구현 (구현 후 최종 화면 출력 X)
0
93
2
(6.11) 회원가입시 프로필 정보 자동 생성하기 Q. 호출 순서 문의
0
66
1
명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이
0
80
2
useMutation 적용 후 새로운 글 등록시 content가 안보여요
0
84
2
6.8 zustand 세션 질문입니다.
0
133
2
next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?
0
112
2
shadcn에서 radix ui와 base ui 차이는 뭔가요?
1
602
2
updateTodo 함수 생성시 화살표 함수 사용 안하는 이유
0
102
2
4.11 바로 투두 삭제가 안됨 질문
0
127
3
매개변수 updatedTodo 관련 질문
0
94
3
인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!
0
108
2
supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!
0
108
2
4.6 id를 string으로 변경시 오류
0
95
2
리액트 타입스크립트 관련 질문있습니다.
0
85
1
소셜 로그인 구현하기 관련하여 질문이 있습니다!
0
133
2
ui 파일 질문드립니다.
0
106
1
tanstack query devtools에서 질문있습니다!
0
83
2
댓글 삭제 시 isPending 질문
0
78
2
두번째 예외상황에 대해 질문있습니다!
0
76
1
리액트 쿼리 질문입니다
1
98
2

