为什么我的jwt令牌在背面而不是在前面返回null

我正在尝试向我的mLab数据库发出GET请求。 我传递一个带有请求的JWT令牌,并将其logging在客户端和服务器上。 它在客户端上正确读取,但在服务器上显示为空。 任何帮助将非常感激。 我正在使用Node.js和Angular。 我对此很新,所以如果错误是显而易见的,我就提前道歉。
这里是服务器的GET路由:

router.get('/', (req, res, next) => { var decoded = jwt.decode(req.query.token); console.log(decoded); console.log('employees'); if(decoded) { return Company.find({_id: decoded._id}) .populate('user', 'firstName') .exec(function(err, company) { if (err) { return res.status(500).json({ title: 'An error occurred', error: err }); } res.status(200).json({ message: 'Success', obj: company }); }); } else { return res.status(401).json({ title: 'Not authenticated', error: { message: 'Please create an account or sign in' } }); } console.log(company); }); 

这里是客户端:

 getEmployees() { const token = localStorage.getItem('token') ? '?token=' + localStorage.getItem('token') : ''; console.log(token); return this.http.get('http://localhost:3000/company' + token) .map((response: Response) => { const employees = response.json().obj; console.log(employees); let transformedEmployees: Employee[] = []; for (let employee of employees) { transformedEmployees.push(new Employee( employee.firstName, employee.lastName, employee.email, employee.password, employee.jobTitle, employee.isAdmin, employee.tasks )); } console.log(transformedEmployees) this.employees = transformedEmployees; return transformedEmployees; }) .catch((error: Response) => { this.errorService.handleError(error.json()); return Observable.throw(error.json()) }); } 

你能分享jwt.decode代码吗? 在发送给jwt.decode之前,还要通过console.log检查req.query.token,如果你可以共享来自其中一个调用的express的控制台输出,那么看到控制台日志的输出将是非常好的。 我相信问题可能是你没有正确解码,或者req.query.token是未定义的。

最好的问候,拉斐尔

您不应该将您的令牌放置在请求的Authorization标头中。

您使用快速中间件解码令牌:

 const myDecoder = (req, res, next) => { req.user = jwt.decode(req.headers.authorization); next(); } 

然后,你把你的路线:

 router.get('/', myDecoder, (req, res) => { let user = req.user; console.log(user); console.log('employees'); if (user) { blah } ... 

不应该通过URL本身传递整个令牌。