<aside> 💡 본인인증으로 출생년도, 이름, 폰번호 받기
/auth/:impUid없음{
"code": 200,
"message": "본인인증이 완료되었습니다.",
"data": {
"userName": "김민지",
"birthYear": "2005",
"phoneNumber": "01066663333"
}
}
{ code: 401, message: "본인인증에 실패했습니다." }
</aside><aside> 💡 회원가입
/auth{
"userId": "user1",
"password": "asd123!",
"nickname": "닉네임",
"userName": "김민지",
"phoneNumber": "01066663333",
"birthYear": "2005"
// "role": "admin" // 옵셔널
}
{ code: 201, message: "회원가입이 완료되었습니다.", data: nickname }{ errorCode: "0001", message: "존재하는 ID입니다." }{ errorCode: "0002", message: "존재하는 닉네임입니다." }{ statusCode: 403, message: "미성년자는 가입할 수 없습니다." }{ statusCode: 409, message: "이미 존재하는 사용자입니다." }
</aside><aside> 💡 로그인
/auth/login{
"userId": "user1",
"password": "asd123!"
}
{
"code": 200,
"message": "로그인 되었습니다.",
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJldW5saSIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNzE1NzkxNTgwLCJleHAiOjE3MTU3OTE1ODV9.BF0mGbhfeVtpWC94KrB2dr7o_AVXf5iiIor_Rhn76mA",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJldW5saSIsImlhdCI6MTcxNTc5MTU4MCwiZXhwIjoxNzE4MzgzNTgwfQ.dDNY_nDVnoCEXBcuc7dFz41cOPoc5GK7JKklEMJSO4c"
}
}
{ code: 404, message: "사용자를 찾을 수 없습니다." }{ code: 401, message: "비밀번호가 일치하지 않습니다." }{ code: 403, message: "탈퇴한 회원입니다." }
</aside><aside> 💡 아이디 찾기 (본인인증 후 요청)
/auth/verification{
"userName": "김민지",
"phoneNumber": "01066663333",
"birthYear": "2005"
}
{ code: 200, message: "아이디를 찾았습니다.", data: userId}{ code: 404, message: "사용자를 찾을 수 없습니다." }
</aside><aside> 💡 비밀번호 변경 전 본인인증 정보 일치 확인 (아이디 검사 후 요청)
/auth/verification/password{
"impUid": "imp_169980159108",
"userId": "eunli"
}
응답 데이터: { code: 200, message: "비밀번호 변경이 가능합니다." }
응답 헤더: Authorization: Bearer 일회용토큰
응답 데이터: { code: 401, message: "해당 유저의 본인인증 정보와 일치하지 않습니다." }
응답 데이터: { code: 404, message: "사용자를 찾을 수 없습니다." }
</aside>
<aside> 💡 로그아웃
/auth/logoutAuthorization: Bearer 액세스토큰{ code: 200, message: "로그아웃 되었습니다." }
</aside><aside> 💡 액세스 토큰 재발급 (리프레시 토큰도 함께 갱신됨)
/auth/refresh-tokenAuthorization: Bearer 리프레시토큰{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJldW5saSIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNzE1ODAzNDQ1LCJleHAiOjE3MTU4MDM0NjB9.Q1ZphJHefrBYvEsDeFS8v1GPeoH-Ki-ZQGOXWI5RWDI"
}
{
"code": 200,
"message": "새로운 액세스 토큰이 발급되었습니다.",
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJldW5saSIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNzE1NzkyMjAzLCJleHAiOjE3MTU3OTIyMTh9.8S_12bid0CTifFaefZjxAW0vLNZ9Plp4GnRkZzKf4ZQ",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJldW5saSIsImlhdCI6MTcxNTc5MjIwMywiZXhwIjoxNzE4Mzg0MjAzfQ.QnT2ER1lxPiaKBlWrNpfIXiJoL-w2s26vOzNe3mry0M"
}
}
{ statusCode: 401, message: "Refresh token expired." }{ errorCode: "1011", message: "This is not an expired access token." }{ errorCode: "1012", message: "Invalid refresh token." }
</aside>