ノードjsとmongooseを使用してローカルパスポートを使用してパスポート戦略を使用する際に問題があります。ときには(必ずしもそうではない)、次のようなエラーが表示され、わからなかったため、システムにログインできませんでした。私はクライアント側のために角度JSを使用しました。ここでMongoose schematype.castForQueryエラー。ユーザー認証に失敗しました
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)
は、エラーのポインティングのために私のコードです: .Iはエラーを見つけることができませんでした(常にではない)私は、ログインしようとしたが、それは時々、上記のエラーを言います。ここで
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
@joeytwiddleうん、私はそれをやった。最初は{}を得ました。そして私は正常にログインすることができました。しかし、私が誰かとチャットを始めてシステムからログアウトすると、ログインできませんでした。私の電子メールは、自分のパスポート内の機能(ファンクション(ユーザー名、パスワード、完了){)内に届きました。ここでは、ユーザー名は何でも電子メールで出力されますが、これは無視されず、データベースからチェックされません。そして今度は、{}の代わりに(Object.prototype:{getKey:[Function]})を取得しました。あなたは何か事実かもしれない、把握できますか?ありがとう –