【问题标题】:Handle Express-JWT Error In Composable Middleware处理可组合中间件中的 Express-JWT 错误
【发布时间】:2016-10-08 18:44:28
【问题描述】:

我正在为每个 API 实现 JWT 授权,如下所示:

auth.js

import expressJwt from 'express-jwt';
import compose from 'composable-middleware';

var validateJwt = expressJwt({
  secret: config.secrets.session
});

function isAuthenticated() {
    return compose()

    .use(function(req, res, next) {
       validateJwt(req, res, next);
    })
    .use(function(req, res, next) {

    User.find({
            where: {
         id: req.user.id
            }
    }).then(function(user){

            //Handle User
        }).catch(function(err){
            //Handle DB Error
        });
    });
}

index.js

import auth from '../../auth';
import express from 'express';
import controller from './user_group.controller';
import * as validators from './user_group.validations';

// Create router object
const router = express.Router();

// Get all user groups
router.get('/', [auth.isAuthenticated(), validators.index], controller.index);

除了 JWT 的错误处理之外,一切都运行良好。在移动到下一个中​​间件之前,我不了解函数 validateJwt(req, res, next); 如何处理 Unauthorized Error stack

【问题讨论】:

    标签: node.js express express-jwt


    【解决方案1】:

    我已经使用以下方法完成了:

    .use(function(err, req, res, next) {
    
      if(err) {
        return res.status(constants.INVALID_OR_NO_ACCESS_TOKEN.code).json({
          status: 'error',
          code: constants.INVALID_OR_NO_ACCESS_TOKEN.code,
          message: constants.INVALID_OR_NO_ACCESS_TOKEN.message
        }).end();
      }
      User.find({
        where: {
          id: req.user.id
        }
      })
    

    【讨论】:

    • 这可行,但是,它无法捕获“SyntaxError: Unexpected token”错误...
    【解决方案2】:

    您可以在 validateJwt 之后添加另一个 .use

    return compose()
           .use(function(req,res,next){
                 validateJwt(req, res, next);
                })
            .use(function(err, req,res,next){
                    if(err){
                     //here you will catch the error generated by the validateJWT
                     // eg: return res.status(401).json(err.message);
                     // or: return next(err);
                     }
                     else{
                        next();
                     }
    
                 })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2017-09-07
      • 2022-01-09
      • 2022-06-20
      相关资源
      最近更新 更多