【发布时间】:2023-04-04 02:51:01
【问题描述】:
我在使用 node js 和 mongoose 的 local-passport 使用护照策略时遇到问题。有时(并非总是)它会显示以下错误,我无法弄清楚并且无法登录系统。我在客户端使用了 Angular JS。
TypeError: schematype.castForQuery is not a function
at cast (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/cast.js:229:32)
at Query.cast (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/query.js:2753:12)
at Query.findOne (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/query.js:1353:10)
at Function.findOne (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/model.js:1343:13)
at Strategy._verify (/Users/Harry/Desktop/socketio/app_api/config/passport.js:17:8)
at Strategy.authenticate (/Users/Harry/Desktop/socketio/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/Users/Harry/Desktop/socketio/node_modules/passport/lib/middleware/authenticate.js:348:16)
at authenticate (/Users/Harry/Desktop/socketio/node_modules/passport/lib/middleware/authenticate.js:349:7)
at module.exports.login (/Users/Harry/Desktop/socketio/app_api/controllers/authentication.js:302:4)
at Layer.handle [as handle_request] (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/layer.js:95:5)
at /Users/Harry/Desktop/socketio/node_modules/express/lib/router/index.js:277:22
at Function.process_params (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/index.js:330:12)
at next (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/index.js:271:10)
这是我的错误指向的代码: 我尝试登录,但有时(并非总是)出现上述错误。我找不到错误。
module.exports.login = function(req, res) {
if (!req.body.email || !req.body.password) {
sendJSONresponse(res, 400, {
"message": "All fields Required."
});
return;
}
passport.authenticate('local', function(err, user, info) {
var token;
if (err) {
sendJSONresponse(res, 400, err);
return;
}
// console.log('user detail : '+user);
if (user && user.verified === true) {
token = user.generateJwt();
sendJSONresponse(res, 200, {
"token": token
});
} else {
sendJSONresponse(res, 401, info);
}
})(req, res); // make sure that req, res are available to the passport
};
这是护照策略的代码:
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(username, password, done) {
User.findOne({
email: username
}, function(err, user) {
if (err) {
console.log("passport_error : "+err);
return done(err);
}
if (!user) {
return done(null, false, {
"message": "Incorrect Username."
});
}
if (!user.validPassword(password)) {
return done(null, false, {
"message": "Incorrect Password." + password
});
}
console.log(user);
return done(null, user);
});
}
));
【问题讨论】:
-
请添加以下日志记录行。如果输出不是
{},那就是你的问题。console.log("Object.prototype:", Object.prototype); -
@joeytwiddle 是的,我做到了。起初我得到了 {}。我可以成功登录。但是当我开始与某人聊天并从系统中注销时,我无法登录。我给定的电子邮件到达了我护照中的函数内部(函数(用户名,密码,完成){)。在这里,无论我给什么电子邮件,都会打印用户名,但它不会超出此范围并从数据库中检查。而这次我得到了 (Object.prototype: { getKey: [Function] } ) 而不是 {} 。你能弄清楚,可能是什么情况?谢谢
标签: node.js express mongoose passport-local passport-facebook