
환경설정
- 코드 내에서 state를 관리해주기 위해서 => useState사용 (비밀번호 입력 관련)
- 변경 완료시 바로 로그인 화면으로 넘어가주기 위해서 useNavigate 사용 => React router dom 사용
- 리액트 타입 스크립트로 작성
// PasswordChange.tsx
const PasswordChange: React.FC = () => {
const navigate = useNavigate();
const [password, setPassword] = useState('');
const [checkPassword, setCheckPassword] = useState('');
...
H3 중제목
const [user, setUser] = useAtom(userAtom);
- 기존에 Login.tsx 에서 user Login을 해주고 user data를 전역 상태 관리 라이브러리인 Atom을 사용하여
데이터를 넣어주고, 이 파일에서 사용해준다.
const handleResetPassword = async () => {
if (password !== checkPassword) {
setErrorMessage('비밀번호가 다릅니다.');
setPassword('');
setCheckPassword('');
return;
}
// 현재 로그인된 회원이 있을시 비밀번호 변경
if (user) {
const { error } = await supabase.auth.updateUser({
password: password
});
if (!error) {
alert('비밀번호 재설정 완료!');
setUser(null);
supabase.auth.signOut();
navigate('/login');
const successMsg = 'Password changed successfully';
setSuccessMessage(successMsg);
console.log(successMsg);
} else {
alert(error);
setErrorMessage(error.message);
console.error('Error changing password:', error.message);
}
}
};
- 현재 Atom상에 현재 로그인 데이터가 존재할 시, onClick 핸들러가 발동되어, supabase에서 제공된 함수를 통해,
유저 정보를 업데이트 시켜준다.
- 이후 계정 로그아웃 시키고, 로그인 화면으로 이동시켜주었다.
<Button onClick={handleResetPassword}>비밀번호 변경하기</Button>
오류메시지
- 주어진 규칙과 달리 6자리 미만 입력시 발동되는 에러문이다.
- 패스워드와 패스워드 확인 두 개가 다를 시 오류 메시지를 띄우고 return 시켜주는
유효성 검사를 만들어두었다.
출처
https://supabase.com/docs/reference/javascript/auth-updateuser
Update a user | Supabase
Updates user data for a logged in user.
supabase.com
'Supabase' 카테고리의 다른 글
[Supabase] 소셜 로그인 구현 (0) | 2023.08.25 |
---|