12. Node 가계부 만들기 [ 로그인 Service 코드 작성 ] - 4

2022. 5. 28. 20:12프로젝트/가계부 - 제작 JavaScript

1. 로그인 성공 시 JWT 토큰 생성

 

설명

- passport-local에서 로그인 성공시 req.user에 유저 정보가 온다.

- 해당 유저의 정보를 객체에 담아 jsonwebtoken 라이브러리를 이용해 JWT를 생성한다.

* 유저의 정보는 아이디, 비밀번호를 담는 것은 jwt 탈취시 위험하기 때문에 지양하고 유저을 특정 할 수 있는 인덱스 값을추천한다. 

 

결과

- Send()에 만들어진 토큰 값을 넣어 전송한다.

const httpError = require('http-errors')
const { Send } = require('../../lib/lib')
const jwt = require('jsonwebtoken')
const JWT = process.env.JWT

const Login = async (req, res, next) => {
  try {
    const user = req.user
    const info = {
      check: user.index
    }
    const accessToken = jwt.sign(info, JWT, {
      expiresIn: '1d',
      issuer: 'localhost',
      subject: 'userInfo'
    })
    return Send(res, accessToken)
  } catch (E) {
    next(E)
  }
}

 

2. 로그인 실패시 throw로 에러 처리

 

- 로그인  실패 rediret 되어 함수가 실행 되면 404 에러를 보낸다.

const LoginFail = async (req, res, next) => {
  try {
    throw httpError(404)
  } catch (E) {
    next(E)
  }
}

 

3. 토큰 에러시 throw로 에러 처리 

 

- 토큰 에러 발생 시 rediret 되어 함수가 실행 되면 404 에러를 보낸다.

const TokenFail = async (req, res, next) => {
  try {
    throw httpError(401)
  } catch (E) {
    next(E)
  }
}

 

4. login.service.js 최종 코드

const httpError = require('http-errors')
const { Send } = require('../../lib/lib')
const jwt = require('jsonwebtoken')
const JWT = process.env.JWT
const Login = async (req, res, next) => {
  try {
    const user = req.user
    const info = {
      check: user.index
    }
    const accessToken = jwt.sign(info, JWT, {
      expiresIn: '1d',
      issuer: 'localhost',
      subject: 'userInfo'
    })
    return Send(res, accessToken)
  } catch (E) {
    next(E)
  }
}

const LoginFail = async (req, res, next) => {
  try {
    throw httpError(404)
  } catch (E) {
    next(E)
  }
}

const TokenFail = async (req, res, next) => {
  try {
    throw httpError(401)
  } catch (E) {
    next(E)
  }
}

module.exports = { Login, LoginFail, TokenFail }
728x90
반응형