티스토리 뷰
회원가입과 로그인 페이지는 동작할 정도로만 간단하게만 구현했다.
사용자의 아이디, 패스워드, 이름만 받고 다른 정보들은 따로 받지 않는다.
또한 중복 체크라던가 글자수 제한 등의 조건들을 적용하지는 않았다.
* 회원가입 URI : /users/login
1. controllers/userController.js
const express = require("express")
const router = express.Router()
const userService = require("../services/userService")
// 로그인
router.post("/login", async (req, res) => {
const uid = req.body.uid
const upw = req.body.upw
const login = await userService.login(uid, upw)
return res.json({ login })
})
- user의 정보인만큼 URL에 바로 노출되는 GET보다 body에 담아 POST로 보내는 방식이 적합해보였다.
2. services/userService.js
const db = require("../libs/db")
const jwt = require('jsonwebtoken');
const jwtSecret = "abcdsfas1234sdefg1234567"
const userService = {
login: async (uid, upw) => {
const conn = await db.getConnection();
// * users 테이블 조회
const [user] = await conn.query("SELECT * FROM users WHERE uid = ? AND upw = ?", [uid, upw]);
conn.release();
// * 예외 처리
if(user.length === 0) {
return {result: "FAILED"};
}
// * JWT 사용
const jwtToken = jwt.sign({ id: user[0].id }, jwtSecret)
return { result: "SUCCESS", jwtToken};
},
}
module.exports = userService;
- 데이터를 직접적으로 다루는 부분이라 db 커넥션 모듈화했던 것을 사용한다.
- 토큰 기반 인증으로 JWT 를 사용할 예정이라 jsonwebtoken 라이브러리도 설치했다.
→ JWT는 쿠키에 비해 안전성이 높고 세션처럼 저장공간을 차지한다거나, 세션 DB에 접근해서 비교하는 작업을 하지 않기 때문에 비교적 효율적이라 생각했다.
* users 테이블 조회
const [user] = await conn.query("SELECT * FROM users WHERE uid = ? AND upw = ?", [uid, upw]);
- where 조건절에 의해 users 테이블에서 유저가 입력한 uid와 upw가 모두 일치하는 행만 반환
* 예외 처리
if(user.length === 0) {
return {result: "FAILED"};
}
- uid와 upw가 모두 일치하는 행이 없을 경우 = 유저 입력값이 잘못됨 (① 해당 아이디 존재 x ② 비밀번호 일치 x)
→ 바로 "FAILED" 반환
* JWT 사용
const jwtToken = jwt.sign({ id: user[0].id }, jwtSecret)
- secret 키는 내가 임의로 지정했다.
- 보안성 측면에서 user의 id(인덱스값)만 담았다.
→ jwt도 암호화는 아니기 때문에 디코딩 방식만 알면 누구나 정보를 확인할 수 있다. - 결과 반환할 때 생성된 jwtToken 값을 함께 return한다.
개선할 점
- jwtToken 만료에 대한 처리
- 에러 핸들링
'프로젝트 > 모임모임' 카테고리의 다른 글
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 모임 불러오기 (0) | 2022.05.26 |
|---|---|
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 사용자 권한(Authorization) 관련 미들웨어 구현 (0) | 2022.05.26 |
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 회원가입 기능 구현 (0) | 2022.05.26 |
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 폴더 생성, 분류 (0) | 2022.05.26 |
| [모임 플랫폼 서비스 개발] Node.js & React - 시작 (0) | 2022.05.26 |
댓글
