회원탈퇴 기능을 구현해봤습니다. 이번에는 모달창으로 안내문을 띄우고 회원탈퇴를 안내하는 방법을 사용했습니다.
먼저 회원탈퇴의 기능적인 구현을 진행했습니다. 회원탈퇴 핸들러를 만들어 axios를 통해 서버와 통신하여 회원탈퇴 버튼을 눌렀을 때 db상의 사용자 정보를 삭제할 수 있도록 로직을 구성했습니다.
const signoutSubmitHandler = () => {
if (!accessToken) {
return
}
axios
.delete('https://localhost:4000/users', {
headers: { authorization: `Bearer ${accessToken}` },
'Content-Type': 'application/json',
})
.then(res => {
localStorage.removeItem('accessToken')
localStorage.removeItem('email')
alert('회원 탈퇴가 완료되었습니다.')
// openAlertHandler();
window.location.replace('/')
})
.catch(err => {
alert('잘못된 요청입니다')
// openWarningAlertHandler();
console.log('회원탈퇴실패', err)
})
먼저 유저가 토큰을 가지고 있지 않으면 return 시키고 토큰이 있을 시 회원탈퇴로직이 작동하도록 했습니다. axios의 delete 메서드를 사용해 서버에서 지정한 주소에 요청을 보내고 헤더에 토큰을 담아 줬습니다. 그 후 성공적으로 요청을 넘기게 되면 로컬스토리지 상에 있는 토큰과 이메일 값을 removeItem을 통해 삭제 시켰습니다. 임시로 삭제가 성공적으로 이뤄졌을 때 alert창을 통해 회원탈퇴가 정상적으로 이뤄졌는지 웹상에서 알 수 있도록 했고, window.location.replace
를 통해 사용자를 메인페이지로 이동시키는 코드를 작성했습니다.
처음 의도처럼 회원탈퇴버튼을 눌렀을 때 바로 회원탈퇴가 되는 것이 아니라 모달창이 열리고 동의하는 체크박스와 "회원탈퇴"라는 것을 똑같이 인풋창에 입력했을 때 회원탈퇴 버튼이 활성화 될 수 있도록 만들었습니다.
const [agreeChecked, setAgreeChecked] = useState(false)
const [fillinText, setFillinText] = useState('')
const agreeCheckHandler = () => {
setAgreeChecked(!agreeChecked)
}
const fillinCheckHandler = e => {
setFillinText(e.target.value)
}
agreeChecked === true && fillinText === '회원탈퇴'
위의 코드처럼 체크박스에 체크가 돼 있고, 인풋값이 회원탈퇴일 때 가장 처음에 만든 회원탈퇴버튼을 활성화 시킬 수 있게 만들었습니다. 이는 삼항연상자를 통해 구현했습니다.
사용자가 회원탈퇴 기능을 사용했을 때 실수할 확률을 줄이고, 한 번 더 회원탈퇴를 하기전에 고민할 수 있도록 이러한 기능들을 추가했고, 좀 더 사용자입장에서 회원탈퇴라는 기능을 잘 사용할 수 있도록 만들었습니다.
안녕하세요! 좋은 글 감사합니다 ㅎㅎ 혹시 전체 코드 깃허브 있다면 링크 공유 가능할까요??