我知道这个问题有很多版本,但我找不到任何帮助我的东西 .
function isAuthenticated() {
return compose()
// Validate jwt
.use(function (req, res, next) {
// allow access_token to be passed through query parameter as well
if (req.query && req.query.hasOwnProperty('access_token')) {
req.headers.authorization = 'Bearer ' + req.query.access_token;
}
validateJwt(req, res, next);
})
// Attach user to request
.use(function (req, res, next) {
User.findById(req.user._id, function (err, user) {
console.log(next);
if (err) {
return next(err);
}
if (!user) {
return res.send(401);
}
req.user = user;
next();
});
});
}
这是错误:
CastError: Cast to ObjectId failed for value "me" at path "_id"
at ObjectId.cast (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\lib\
schema\objectid.js:116:13)
at ObjectId.castForQuery (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongo
ose\lib\schema\objectid.js:165:17)
at Query.cast (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\lib\que
ry.js:2317:32)
at Query.findOne (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\lib\
query.js:1118:10)
at Function.findOne (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\l
ib\model.js:1049:13)
at Function.findById (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\
lib\model.js:986:15)
at Object.exports.show [as handle] (C:\Users\Benoit\Desktop\Gakusei\server\a
pi\user.js:43:8)
at next_layer (C:\Users\Benoit\Desktop\Gakusei\node_modules\express\lib\rout
er\route.js:103:13)
at next (C:\Users\Benoit\Desktop\Gakusei\node_modules\composable-middleware\
lib\composable-middleware.js:40:9)
at Promise.<anonymous> (C:\Users\Benoit\Desktop\Gakusei\server\auth\auth.ser
vice.js:37:9)
我正在调整一些Yeoman样板代码,我没有触及这部分 . 任何线索将不胜感激 .
为了完整,这里是我对'我'的api
exports.me = function (req, res, next) {
var userId = req.user._id;
User.findOne({
_id: userId
}, '-salt -hashedPassword', function (err, user) {
if (err) {
return next(err);
}
if (!user) {
return res.json(401);
}
res.json(user);
});
};
1 回答
您正尝试通过查询_id等于'me'来使用
findOne
访问对象 . Mongoose尝试将字符串'me'转换为ObjectId但失败 . 我可以't tell from the traceback if it'这是你的me
函数问题(这是你提供的代码中唯一使用findOne的地方),但你可以尝试将函数调用更改为User.findById(userId, ...)
. 但是,不管怎么说,或者说这对任何人都有帮助 . 希望这至少给你一些方向 . 如果您仍有问题,请添加评论 .