새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.

바로가기


모던웹(NEMV) 혼자 제작 하기 3기 - 46 실제 데이터로 로그인하기

1 분 소요

이제 실제 데이터로 로그인을 해보겠습니다.

토큰 발행시 사용될 보안키 설정값에 추가하기

config/index.js

admin: {
    id: 'memi',
    // ...
},
secretKey: 'abcdefg'

토큰 발행 함수 작성

be/api/sign/index.js

const jwt = require('jsonwebtoken')
const cfg = require('../../../../config')
const User = require('../../../models/users')

const signToken = (id, age) => {
  return new Promise((resolve, reject) => {
    jwt.sign({ id, age }, cfg.secretKey, (err, token) => {
      if (err) reject(err)
      resolve(token)
    })
  })
}

id, age와 cfg.secretKey로 토큰을 만드는 함수를 만듭니다.

로그인 라우터 변경하기

be/api/sign/index.js

router.post('/in', (req, res) => {
  const { id, pwd } = req.body
  if (!id) return res.send({ success: false, msg: '아이디가 없습니다.'})
  if (!pwd) return res.send({ success: false, msg: '비밀번호가 없습니다.'})

  User.findOne({ id })
    .then((r) => {
      if (!r) throw new Error('존재하지 않는 아이디입니다.')
      if (r.pwd !== pwd) throw new Error('비밀번호가 틀립니다.')
      return signToken(r.id, r.age)
    })
    .then((r) => {
      res.send({ success: true, token: r })
    })
    .catch((e) => {
      res.send({ success: false, msg: e.message })
    })
})
  • 사용자 id로 찾습니다.
  • 없거나 패스워드가 틀리면 에러메세지와 함께 success: false로 데이터를 전송합니다.
  • 정상적인 경우에 id, age로 토큰을 만들어서 success: true와 토큰을 전달합니다.

결과

프론트에서 로그인이 정상 수행된 결과 입니다.

{success: true, token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Im1lb…M5N30.EE1PK1QHCGF_LizjaC2BK2qC8xHgM94X5YcHFNoOmT4"}

영상

댓글남기기