如何在jsonwebtoken之前添加路由?

时间:2017-08-24 04:08:29

标签: json node.js http json-web-token

我正在使用jsonwebtoken,我不完全确定它是如何工作的。我有正常的登录路线,应该在.verify功能之前。我曾经多次使用jwt但从未尝试过使用过它之前的路线。

这是我的路线文件

var express = require('express');
var router = express.Router();
var usersController = require('../controllers').users;
var jwt = require('jsonwebtoken');



router.post('/signup', function(req,res,next) {
  return usersController.signup(req,res);
});

router.post('/signin', function(req,res,next) {
  return usersController.signin(req,res);
});

router.post('/social-signin', function(req,res,next) {
  return usersController.authSignin(req,res);
});

router.use('/auth', function (req,res,next) {
  jwt.verify(req.query.token, 'secret', function (err, decoded) {
    if (err) {
      return res.status(401).json({
        title: 'You are not authorized to do that',
        error: "Please sign out and sign back in"
      })
    }
  });
  next();
});

router.get('/auth', function(req,res){
  return usersController.getUser(req, res);
});

router.patch('/auth/update/:userId', function(req,res) {
  return usersController.update(req,res);
});

router.delete('/auth/delete', function(req,res,next) {
  return usersController.destroy(req,res);
});



module.exports = router;

我在为getUser做GET请求时收到此错误。

HttpErrorResponse {headers: HttpHeaders, status: 401, statusText: "Unauthorized", url: "http://localhost:3000/user/auth?token=eyJhbGciOiJI…3Njd9.FE3sYhOSFhfhnxkACKSmclcHEWKVhpItuAMqBl-A-5w", ok: false, …}
error
:
{title: "You are not authorized to do that", error: "Please sign out and sign back in"}
headers
:
HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message

我知道它可能很简单但我不知道。

***这是getUser的代码

getUser: function getUser(req, res) {
    var decoded = jwt.decode(req.query.token);
    return User.findOne({
      where: {
        id: decoded.user.id
      }
    }).then(function(user){
      return res.status(200).json({
        title: "User found",
        obj: user
      });
    }).catch(function(error) {
      return res.status(400).json({
        title: 'There was an error getting user!',
        error: error
      });
    });
  },

1 个答案:

答案 0 :(得分:0)

在您的身份验证中,请尝试:

router.use('/auth', function (req,res,next) {
  jwt.verify(req.query.token, 'secret', function (err, decoded) {
    if (err) {
      return next(new Error('You are not authorized to do that'));
    }
  });
  next();
});

这仍然是一个问题

由于您的getUser会返回一个承诺,而您只是从路线返回。我相信你想在从你的路线回来之前等待Promise的结果。