使用的插件:jsonwebtoken
    登录添加jwt令牌

    1. const adminService = require('../../services/adminService');
    2. const express = require('express');
    3. // 路由
    4. const router = express.Router();
    5. //高阶函数 解决无法使用promise
    6. const { asyncHandler } = require('../getSendResult');
    7. // jwt 认证
    8. const jwt = require('../jwt')
    9. router.post('/login', asyncHandler( async(req,res,next) => {
    10. const result = await adminService.login(req.body.loginId, req.body.loginPwd);
    11. if (result) {
    12. // jwt
    13. jwt.publish(res, 3600, {
    14. id: result.id,
    15. })
    16. }
    17. return result;
    18. }))
    19. module.exports = router;

    验证jwt令牌

    1. const jwt = require('./jwt')
    2. /**
    3. * 那些接口需要有cookie才能访问
    4. */
    5. const needTokenApi = [
    6. { method: 'POST', path: '/api/student' },
    7. { method: 'PUT', path: '/api/student/:id' },
    8. { method: 'GET', path: '/api/student' },
    9. { method: 'GET', path: '/api/admin/whoami' },
    10. ];
    11. const { getErr } = require('./getSendResult');
    12. // 将路径转化为正则进行匹配
    13. const { pathToRegexp, match, parse, compile } = require('path-to-regexp');
    14. // const cryptoToken = require('../util/cryptoToken');
    15. module.exports = (req, res, next) => {
    16. const apis = needTokenApi.filter((ele) => {
    17. const reg = pathToRegexp(ele.path);
    18. return ele.method == req.method && reg.test(req.path);
    19. });
    20. if (apis.length === 0) {
    21. next();
    22. return;
    23. }
    24. /**
    25. * 是否有token 通过cookie进行验证
    26. */
    27. // let token = req.cookies.token;
    28. // if (!token) {
    29. // token = req.headers.authorization;
    30. // }
    31. // if (!token) {
    32. // console.log('没有token');
    33. // handleNonToken(req, res, next);
    34. // return;
    35. // }
    36. // 通过session进行验证
    37. // if(req.session.loginUser) {
    38. // next();
    39. // return;
    40. // } else {
    41. // handleNonToken(req, res, next)
    42. // }
    43. // 通过jwt验证
    44. const result = jwt.verify(req)
    45. if (!result) {
    46. handleNonToken(req, res, next);
    47. return;
    48. }
    49. req.userId = result.id;
    50. next();
    51. };
    52. /**
    53. * 没有token
    54. * @param {*} req
    55. * @param {*} res
    56. * @param {*} next
    57. */
    58. function handleNonToken(req, res, next) {
    59. res
    60. .status(403)
    61. .send(getErr('you dont have any token to access the api', 403));
    62. }