수업 복습/Node.js

11월 6일 수업 내용 - Node.js - Git / Day07 // 미완성

김복칠 2023. 11. 6. 17:16

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})
}