为啥我的 jwt 令牌在背面而不是正面返回 null
Posted
技术标签:
【中文标题】为啥我的 jwt 令牌在背面而不是正面返回 null【英文标题】:why is my jwt token returning null on the backside but not the front为什么我的 jwt 令牌在背面而不是正面返回 null 【发布时间】:2018-04-05 18:10:08 【问题描述】:我正在尝试向我的 mLab 数据库发出 GET 请求。我将 JWT 令牌与请求一起传递,并将其记录在客户端和服务器上。它在客户端上正确读取,但在服务器上显示为 null。任何帮助将非常感激。我正在使用 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())
);
【问题讨论】:
console.log(req.query.token);
说什么?您是否在服务器端使用 jwt 库(解码功能来自哪里)?为什么您不使用签名令牌时也使用的密钥进行解码?
【参考方案1】:
您不应将令牌放在请求的 Authorization
标头中。
您使用 express 中间件来解码令牌:
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 本身传递整个令牌。
【讨论】:
以上是关于为啥我的 jwt 令牌在背面而不是正面返回 null的主要内容,如果未能解决你的问题,请参考以下文章
如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片