11월 6일 수업 내용 - Node.js - Git / Day07 // 미완성
1. router - auth.js 만들기
import express from 'express'
import {body} from 'express-validator'
import {validate} from '../middleware/validator.js'
import * as authController from '../cotroller/auth.js'
import {isAuth} from '../middleware/auth.js'
- 프로그램에 회원가입과 로그인이 가능하도록 하기위한 .js 파일
- 먼저 필요한 설정들을 import 해줌
- express-validator 를 body 에 설정해서 유효성이 필요한 데이터를 body 에 입력
- validate 에 유효성 검사가 가능한 '../middleware/validator.js' 연결
- authController 에 데이터 분석을 하기 위한 '../cotroller/auth.js' 를 연결
- isAuth 에 암호화된 토큰의 유효성 확인을 위한 '../middleware/auth.js' 을 연결
const router = express.Router()
const validateCredential = [body('username').trim().notEmpty().withMessage('username은 반드시 입력해야 함'),
body('password').trim().isLength({min:4}).withMessage('password는 반드시 4자 이상이어야 함'),validate]
const validateSignup = [ ...validateCredential,body('name').notEmpty().withMessage('name은 반드시 입력'),
body('email').isEmail().withMessage('email 형식 확인'),
body('url').isURL().withMessage('URL 형식 확인').optional({nullable:true,checkFalsy:true},validate)]
- 변수 router에 express 모듈을 생성하고 Router() 함수를 활용해서 작동할 수 있게끔 설정
- 변수 validateCredential 과 validateSignup 에 body 로 데이터를 받아 유효성 검사 진행
- 이때 요청 받은 데이터가 유효하다면 변수 실행, 유효하지 않다면 .withMessage 송출
- 각 body 별로 요청받은 데이터를 유효성을 진행하는 조건이 다른데 url 의 optional 은 url 의 값이 null 값이거나 공백, false 값이어도 프로그램을 진행하겠다는 설정
router.post('/signup',validateSignup,authController.signup)
router.post('/login',validateCredential,authController.login)
router.get('/me',isAuth, authController.me)
export default router
- '/signup' post 링크에 validateSignup 를 통해 유효성을 확인, authController.signup 을 통해 '../cotroller/auth.js' 에 있는 함수 signup() 를 사용
- '/login' post 링크에 validateCredential 를 통해 유효성을 확인, authController.login 을 통해 '../cotroller/auth.js' 에 있는 함수 login() 를 사용
- '/me' get 링크에 isAuth 를 통해 암호화된 토큰의 유효성을 확인, authController.me 를 통해 '../cotroller/auth.js' 에 있는 함수 me() 를 사용
2. cotroller- auth.js 만들기
import jwt from 'jsonwebtoken'
import bcrypt from 'bcrypt'
import * as userRepository from '../data/auth.js'
- router.js 파일에서 이용할 함수와 코드를 작성
- 먼저 필요한 설정들을 import 해줌
- jsonwebtoken 를 jwt 에 설정해서 암호화된 데이터의 유효성 확인
- userRepository 에 데이터 분석을 하기 위한 '../data/auth.js' 를 연결
const jwtSecretKey = 'abcdef!@#$%^()'
const jwtExpiresInDays = '2d'
const bcryptSaltRounds = 12;
- 암호화된 토큰에서 활용할 변수들을 사전에 설정
export async function signup(req,res) {
const {username,password,name,email,url} = req.body
const found = await userRepository.findByUsername(username)
if (found) {
return res.status(409).json({message:`${username} 이 이미 가입되었음`})
}
const hashed = await bcrypt.hash(password,bcryptSaltRounds)
const userId = await userRepository.createUser({username, password:hashed,name,email,url})
const token = createJWtToken(userId)
res.status(201).json({token,username})
}
-