2016-02-12 43 views
1

我正在使用Express/Node並編寫了一些身份驗證中間件來檢查每個請求上的JWT。在特定路由上禁用特定謂詞的身份驗證中間件

我想禁用這個路由中間件(POST'/ api/user /'),但是我想保留路由的中間件(GET'/ api/user /')。

我該如何做到這一點?

請參閱下面的代碼。

app.js

// app.js 


app.use('/api/userauth', require('./Controllers/api/userauth.js')) 
app.use(require('./Middleware/Authenticate.js')); 
app.use('/api/user', require('./Controllers/Api/User.js')); 
app.use('/api/item', require('./Controllers/Api/Item.js')); 

authenticate.js

//authenticate.js middleware 


    var token = req.body.token || req.query.token || req.headers['x-access-token']; 


    if (token) { 
     jwt.verify(token, secretKey.secretKey, function(err, decoded){ 
      if (err) { 
       return res.json({ 
        success : false, 
        message : "failed to auth token." 
       }) 
      } else { 
       console.log(decoded); 
       req.decoded = decoded; 
       next(); 
      } 
     }) 
    } else { 
     res.status(403).send({ 
      success:false, 
      message:'no token provided' 
     }) 
    } 
} 

API/user.js的

router.route('/') 

.get(function(req,res){ 
    models.User.findAll({ 
    }).then(function(users){ 
     res.json(users); 
    }) 
}) 

.post(function(req,res){ 
    models.User.create({ 
     username : req.body.username, 
     password : req.body.password, 
     firstname : req.body.firstname, 
     lastname : req.body.lastname 
    }).then(function(user){ 
     res.json({ 
      "Message" : "Succesfully created user: ", 
      "User: " : user 
     }); 
    }); 
}); 
module.exports = router; 
+0

有點像這樣? http://stackoverflow.com/questions/19337446/is-it-possible-to-disable-remove-a-middleware-for-specific-route-in-expressjs –

+0

@LucasCosta偉大的工程!謝謝。 –

回答

0

老問題,但在這裏你走!

而不是使用一個空白

app.use(require('./Middleware/Authenticate.js')); 

,所有路由只是這樣做在你的子路由器

API/user.js的

var authMiddleware = require('./Middleware/Authenticate.js') 
router.route('/') 

.get(function(req,res){ 
    models.User.findAll({ 
    }).then(function(users){ 
     res.json(users); 
    }) 
}) 

.post(authMiddleware, function(req,res){ 
    models.User.create({ 
     username : req.body.username, 
     password : req.body.password, 
     firstname : req.body.firstname, 
     lastname : req.body.lastname 
    }).then(function(user){ 
     res.json({ 
      "Message" : "Succesfully created user: ", 
      "User: " : user 
     }); 
    }); 
}); 
module.exports = router; 

現在它只是路由具有Authenticate Middleware而不是獲得一個!

相關問題