Express + jsonwebtoken を試す

環境を作る

必要なモジュールをインストールする

yarn add express jsonwebtoken
yarn add -D nodemon

nodemon はコードの変更を検知して自動でnodeを再起動するために必要

Expressの設定をする

サーバーを起動するコードを書く

const express = require("express")

const app = express()
const server = app.listen(3333, () => {
  console.log("Node.js is listening to PORT:" + server.address().port)
})

Express を起動する。

nodemon app.js

トークンに対する処理を実装する

token.js というファイル(名前はなんでも良い)を作り、そこにjwtに対する処理を書く。

const jwt = require('jsonwebtoken')

const secretKey = 'kkofjow78310ifjl'

const getToken = req => {
  if (
    req.headers.authorization &&
    req.headers.authorization.split(' ')[0] === 'Bearer' ) {
    return req.headers.authorization.split(' ')[1]
  }

  return null
}

const createToken = user => {
  return jwt.sign(user, secretKey, { expiresIn: '30s' })
}

const verifyToken = req => {
  const result = {}

  const token = getToken(req)

  jwt.verify(token, secretKey, (err, decoded) => {
    result.user = decoded
    result.err = err
  })

  return result
}

module.exports = {
  createToken,
  verifyToken
}

secretKey は、トークン化する際の鍵

createToken は、jwt を作成する処理。

verifyToken は、jwt の検証処理。

api 側の実装

サインイン用のapi

app.get('/api/sign', (req, res) => {
  const user = {
    id: 100,
    name: 'user1'
  }

  const token = tokenHelper.createToken(user)

  res.json({
    token
  })
})

jwt を検証する api

app.post('/api/post', (req, res, next) => {
  const auth = tokenHelper.verifyToken(req)

  if(auth.err !== null) {
    res.json({
      err: auth.err
    })
  } else {
    res.json({
      result: 'post ok',
      user: auth.user
    })
  }
})

https://github.com/miyazakitakafumi/express-test