문제
비밀번호 재설정 이메일의 URL로 접근 시, 일회성 토큰이 제대로 인식되지 않는 문제가 발생했습니다.
원인
일회성 토큰이 유효한 인증 세션으로 자동 변환되지 않았기 때문입니다.
해결 방법
이 문제를 해결하기 위해 supabase.auth.exchangeCodeForSession() 메서드를 사용하여 일회성 토큰을 유효한 인증 세션으로 교환했습니다.
import { createClient } from '@/supabase/server';
import { NextRequest, NextResponse } from 'next/server';
export async function POST(request: NextRequest) {
const { newPassword, token } = await request.json();
const supabase = createClient();
try {
await supabase.auth.exchangeCodeForSession(token);
const { error } = await supabase.auth.updateUser({ password: newPassword });
if (error) {
console.error('Password update error:', error);
return NextResponse.json({ error: error.message }, { status: 400 });
}
return NextResponse.json({ message: 'The password has been successfully changed.' }, { status: 200 });
} catch (error) {
console.error('Unexpected error:', error);
return NextResponse.json({ error: 'An unexpected error occurred, please try again.' }, { status: 500 });
}
}
이와 같은 방식으로 supabase.auth.exchangeCodeForSession()을 사용하여 비밀번호 재설정 프로세스를 개선할 수 있었습니다.
결과
이제 사용자는 비밀번호 재설정 이메일에 포함된 URL을 통해 접속하여 일회성 토큰을 유효한 인증 세션으로 교환하고, 비밀번호를 성공적으로 변경할 수 있습니다.
'TIL' 카테고리의 다른 글
TIL - 회원가입 폼 퍼널 구조로 개선, 로그인 유지 기능 구현 (1) | 2024.07.23 |
---|---|
TIL - 서버리스 환경에서의 이메일 인증 구현 및 비밀번호 재설정 방식 개선 (0) | 2024.07.22 |
TIL - 소셜 로그인 리다이렉트 트러블 슈팅 (Next.js, supabase) (0) | 2024.07.18 |
TIL- 로그인 상태 관리 기술적 의사결정 및 트러블 슈팅 (0) | 2024.07.17 |
TIL - 프로젝트 선정 과정 및 최종 결정 (0) | 2024.07.16 |