【问题标题】:How to call jwt verification function from routes?如何从路由中调用 jwt 验证功能?
【发布时间】:2018-07-05 18:46:56
【问题描述】:

verify_jwt_token

var jwt = require('jsonwebtoken');
var config = require('./env/config.json')

module.exports = function(req,res,next) {
  var token = req.body.token || req.query.token || req.headers['x-access-token'];
    if (token) {
        console.log("----------------------------------------");
        console.log(token);
        console.log("----------------------------------------");

        console.log(config.jwt_secret);
        console.log("----------------------------------------");

    // verifies secret and checks exp
        jwt.verify(token, config.jwt_secret, function(err, decoded) {
            if (err) { //failed verification.
                return res.json({"error": true});
            }
            req.decoded = decoded;
            next(); //no error, proceed
        });
    } else {
        // forbidden without token
        return res.status(403).send({
            "error": true
        });
    }
}

路线

 var user  = require('../controller/user.controller.js');
 var token_verify = require('../../config/verify_jwt_token.js')

module.exports = function (app) {

app.route('/register_user').post(user.register);
app.route('/login').get(user.login);


app.route('/auth',token_verify).get(user.auth);


}

我想从这条路由调用 j w t 验证函数。我不想从控制器调用。 app.route('/auth',token_verify).get(user.auth);从这条路线调用 请帮忙。 先感谢您。

【问题讨论】:

    标签: node.js express jwt


    【解决方案1】:

    这将是可行的:

    const express = require('express')
    const app = express()
    
    function jwtVerify (req, res, next) {
      console.log('verifying token...')
      // logic
      next()
    }
    
    app
      .use(jwtVerify)
      .route('/example')
      .get((req, res) => res.json({ hello: 'World' }))
    
    app.listen(3000)
    

    您将遇到的问题是中间件将为您定义的每个 路由执行,因为中间件应用于app 实例。要解决此问题,您需要使用Router。下面的快速脏示例:

    app.js

    const express = require('express')
    const app = express()
    const securedRoutes = require('./secured-routes')
    
    function jwtVerify (req, res, next) {
      console.log('verifying token...')
      // logic
      next()
    }
    
    app.use('/secured', jwtVerify, securedRoutes)
    
    app.listen(3000)
    

    secured-routes.js

    const express = require('express')
    const router = express.Router()
    
    router.get('/', (req, res) => res.json({ message: 'Hello from secured routes' }))
    
    module.exports = router
    

    【讨论】:

    • 很高兴它有帮助。如果有帮助,请将答案标记为正确。
    • StackOverflow 不允许我标记。因为声望和徽章。
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 2020-11-18
    • 2020-06-12
    • 2023-03-25
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多