복습 겸 코드는 다음에 줄이고...... 그냥 주석달아서 설명
말로 하면 생각의 정리가 모자라서 글로 적는게 좋다.
post에서 해야하는 것
patch에서 해야하는 것
app.post("/tokens/phone", async (req, res) => {
const phone = req.body.myphone;
// 요청받은 핸드폰 번호 담아두기
let check = await Phone.findOne({ phone: `${phone}` }).exec();
// 그 핸드폰 번호를 템플릿 리터럴로 잡아서 Phone의 데이터베이스에서 꺼내오고, 함수에 담음
if (check === null) {
check = "1";
}
// 데이터베이스가 빈 것을 방지하기 위한 예외처리
checkValidationPhone(phone);
// 1. 휴대폰 검증 함수
const isValid = checkValidationPhone(phone);
if (isValid) {
// 2. 토큰 만드는 함수
const mytoken = getToken();
// 3. 문자 전송하는 함수
sendTokenToSMS(phone, mytoken);
if (phone !== check.phone) {
// 요청받은 핸드폰 번호와, 그 요청받은 번호로 검색한 DB 저장소의 핸드폰 번호의 >> 다르다면 <<
const myphone = new Phone({
token: mytoken,
phone: `${phone}`,
isAuth: false,
});
// 새로운 데이터 베이스를 만들어서
await myphone.save();
// 저장하고
res.send("인증완료!");
// 클라이언트에게 인증완료 메세지 발송
} else {
// 만약에 요청받은 번호와 요청받은 번호로 검색한 DB 저장소의 핸드폰 번호가 >> 같다면 <<
res.send("토큰변경!");
// 클라이언트에게 토큰 변경 메세지 발송
await Phone.updateOne({ phone: `${phone}` }, { token: mytoken });
// 요청받은 번호로 검색한 DB의 token을 새로 발급받은 것으로 변경
}
}
});
app.patch("/tokens/phone", async (req, res) => {
const myphone = req.body.myphone;
// 요청받은 핸드폰 번호 저장
const token = req.body.token;
// 요청받은 토큰 저장
let db = await Phone.findOne({ phone: `${myphone}` }).exec();
// 요청받은 번호로 DB에서 검색
if (db === null) {
db = "1";
}
// 데이터베이스가 빈 것을 방지하기 위한 예외처리
if (myphone !== db.phone || token !== db.token) {
// 요청받은 번호 or 토큰과 DB에 있는 번호 or 토큰이 다를 경우에는
res.send("false");
// 클라이언트에게 false 메세지 발송
} else {
// 번호, 토큰 둘 다 같을 경우에
await Phone.updateOne({ phone: `${myphone}`}, { isAuth: true });
// 요청받은 핸드폰으로 접근한 DB의 isAuth값을 true로 변경
res.send("true");
// 클라이언트에게 true 메세지 발송
}
});