2017-06-01 122 views
0

我目前使用jet来验证用户。 在我的user.routes我也有一个router.param()来加载用户并将其附加到请求。 是否对Jet用户进行了控制:userId还保护着router.param()负载(检查之前是否?) 还是应该保护router.param()?Node-Express JWT认证过程如何?

问题是JWT是设置req.user到:

{ username: 'johndoe', iat: 1496329757 } 

而且router.param()的搜索和用户应该加载到req.user过! ? 但它不...

如果我调试REQ用户在addRole功能的开始,我仍然得到

{ username: 'johndoe', iat: 1496329757 } 

注:不知道标题正确地反映了我的问题.. 。建议表示欢迎

user.route.js

import express from 'express'; 
import expressJwt from 'express-jwt'; 
import validate from 'express-validation'; 
import paramValidation from '../../../config/param-validation'; 
import userCtrl from '../controllers/user.controller'; 
import config from '../../../config/config'; 

const router = express.Router(); // eslint-disable-line new-cap 
... 
/** GET /api/users/:userId - Get user */ 
router.route('/:userId') 
    /** GET /api/users/:userId - Get user */ 
    .get(expressJwt({ secret: config.jwtSecret }), userCtrl.get); 
    ... 
/** Load user when API with userId route parameter is hit */ 
router.param('userId', userCtrl.load); 

user.controller.js

import httpStatus from 'http-status'; 
import APIError from '../../helpers/APIError'; 
import User from '../../models/user.model'; 

/** 
* Load user and append to req. 
*/ 
function load(req, res, next, id) { 
    User.get(id) 
    .then((user) => { 
     req.user = user; // eslint-disable-line no-param-reassign 
     next(); 
    }) 
    .catch((e) => { 
     if (e.name === 'CastError') { 
      const err = new APIError('Cast Error', httpStatus.BAD_REQUEST, true); 
      next(err); 
     } else { 
      const err = new APIError('User not found', httpStatus.NOT_FOUND, true); 
      next(err); 
     } 
     }); 
} 

回答

0

我解决这个问题,修改在控制器的负荷()函数:

function load(req, res, next, id) { 
    User.get(id) 
    .then((user) => { 
     req.userData = user; // eslint-disable-line no-param-reassign 
     next(); 
    })