Authorization

welaundry 회원 인증 방식을 설명합니다.

왜 인증 절차가 필요한가

각 세탁소별 포스기를 이용하는 사장님들의 맞춤형 데이터를 제공하고 고객, 품목, 주소, 매출 등 각 게게별 고유한 정보를 처리하기 위해서 입니다.

적용 코드

  • CORS 작동방식 중 Credentials(자격 증명) 방식을 통해 브라우저 요청 헤더에 쿠키(인증 토큰)를 포함하여 서버단에서 JWT 토큰을 검증하는 코드입니다.

  • JWT(JSON Web Token) 은(는) JSON 포맷을 이용하여 사용자에 대한 property를 저장(생성)하는 Claim 기반의 WebToken입니다.

  • 토큰-기반-인증 시스템은 인증 받은 사용자들에게 토큰을 발급하고, 서버에 요청할 때마다 쿠키에 보관된 사용자 인증 정보를 검증하기 때문에, 서버-기반-인증 방식 처럼 세션ID 토큰을 검증하기 위해 서버의 리소스를 많이 소모할 필요가 없습니다.

import jwt from 'jsonwebtoken';

import * as AuthRepository from '../data/auth.js';
import { config } from '../config.js'

const AUTH_ERROR = { message: '로그인이 필요한 서비스입니다.' }; // Authorization Error

export const isAuth = async (req, res, next) => {
  let token;
  
  if (!token) {
    token = req.cookies['token'];
  }
  if (!token) {
    return res.status(401).json(AUTH_ERROR);
  }

  // JWT(Json Web Token)
  jwt.verify(
    token,
    config.jwt.secretKey,
    async (error, decoded) => {
      if (error) {
        return res.status(401).json(AUTH_ERROR);
      }
      const user = await AuthRepository.findById(decoded.id);
      if (!user) {
        return res.status(401).json(AUTH_ERROR);
      }
      
      req.userId = user.id;
      req.token = token;
      req.userName = user.username;
      next();
    }
  )
}

Last updated