登录接口-jwt加密生成token(解密)

178 阅读1分钟

安装jsonwebtoken

npm install jsonwebtoken -S

加密

utils/constant.js:密钥和token时间

module.exports = {
    PRIVATE_KEY: 'test',
    EXPIRESD: 60 * 60 * 24
}

user.js

const jwt = require('jsonwebtoken')
const {PRIVATE_KEY, EXPIRESD } = require('../utils/constant');
... ...
/* 登录 */
router.post('/login', async (req, res, next) => {
  let { username, password } = req.body
  try {
    let user = await querySql('select * from user where username=?', [username])
    if (user.length != 0) {
      password = md5(`${password}${PWD_SALF}`)
      let result = await querySql('select * from user where username = ? and password = ?', [username, password])
      if (result.length == 0) {
        res.send({ code: -1, msg: '账号或密码错误' })
      } else {
        let token = jwt.sign({ username }, PRIVATE_KEY, { expiresIn: EXPIRESD })
        res.send({ code: 0, msg: '登录成功', token: token })
      }
    } else {
      res.send({ code: -1, msg: '该账号不存在' })
    }
  } catch (error) {
    console.log(error)
    next(error)
  }
})

解密

npm install express-jwt
const jwt = require('express-jwt')
const { PRIVATE_KEY } = require('./utils/constant');
... ...
app.use(jwt({
  secret: PRIVATE_KEY
}).unless({ // 白名单
  path: ['/api/users/login', '/api/users/register']
}))

... ...
// error handler
app.use(function (err, req, res, next) {
  if (err.name == 'UnauthorizedError') {
    res.status(401).send('invalid token...');
  } else {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
  }
});