【发布时间】:2020-04-07 18:36:12
【问题描述】:
我有一个 node.js 应用程序连接到 mongodb 并尝试在集合中查找文档。不幸的是,通话永远不会完成。
这是我的 app.js 的相关部分,我得到控制台日志 connected to mongodb,但在函数 signInComplete 中,UserS.findOne 什么都不做/不调用 then。
var mongoose = require("mongoose");
//connect to mongodb
mongoose.connect(process.env.MONGO_DB_URI, { dbName: "newDb" }, () => {
console.log("connected to mongodb");
});
const UserS = require("./models/user-model");
// Callback function called once the sign-in is complete
// and an access token has been obtained
async function signInComplete(iss, sub, profile, accessToken, refreshToken, params, done) {
if (!profile.oid) {
return done(new Error("No OID found in user profile."), null);
}
// Save the profile in user storage
UserS.findOne({ msId: profile.oid }).then(currentUser => {
if (currentUser) {
//already have user
console.log("user is:" + currentUser);
done(null, currentUser);
} else {
//if not create new user
new UserS({
msId: profile.oid,
profile,
oauthToken
})
.save()
.then(newUser => {
console.log("new user created:" + newUser);
done(null, newUser);
});
}
});
}
我的用户模型
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
msId:String,
profile:Object,
oauthToken:Object
});
const User = mongoose.model('user',userSchema,"users");
module.exports=User;
signInComplete 被passport 调用
passport.use(new OIDCStrategy(
{
identityMetadata: `${process.env.OAUTH_AUTHORITY}${process.env.OAUTH_ID_METADATA}`,
clientID: process.env.OAUTH_APP_ID,
responseType: 'code id_token',
responseMode: 'form_post',
redirectUrl: process.env.OAUTH_REDIRECT_URI,
allowHttpForRedirectUrl: true,
clientSecret: process.env.OAUTH_APP_PASSWORD,
validateIssuer: false,
passReqToCallback: false,
scope: process.env.OAUTH_SCOPES.split(' ')
},
signInComplete
));
我整天都在努力找出问题所在,但我在这里错过了什么?
【问题讨论】:
-
你能发帖吗,你怎么也调用
signInComplete()函数 -
signInComplete 通过护照调用。我在问题中添加了代码。
-
难道你不应该在
findOne()和save()之后做return done() -
即使我在
findOne()的所有路径中都执行return done()也行不通。我console.log()每条路径也是如此,并且 none 记录在findOne().then()中。
标签: node.js mongodb mongoose passport.js