我有一个iOS应用程序,我使用Facebook API登录,我得到一个访问令牌作为响应.现在我想使用此令牌来验证我的后端服务器上的用户.
我正在为Passport.js使用passport-facebook-token策略.
var FacebookTokenStrategy = require('passport-facebook-token');
module.exports = function(app) {
app.use(passport.initialize());
app.use(passport.session());
passport.use(new FacebookTokenStrategy({
clientID: '32424222424024',
clientSecret: '3292e42148264c2817523232446187',
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOne({ facebookId: profile.id }, function (err, user) {
console.log("facebook");
return done(err, user);
});
}
));
app.get('/auth/facebook',
passport.authenticate('facebook-token'),
function (req, res) {
res.send(req.user? 200 : 401);
}
);
};
Run Code Online (Sandbox Code Playgroud)
但是当我调用http:// localhost:3000/auth/facebook?access_token = my_token_here时出现以下错误:
InternalOAuthError:无法在C:\ app\www\app \node_modules\passport-facebook-token\lib\index.js:152:32在passBackControl(C:\ app\www\app \node_modules\oauth \)获取用户配置文件lib\oauth2.js:123:9)IncomingMessage.(C:\ app\www\app \node_modules\oauth\lib\oauth2.js:143:7)在emitNadableNT的IncomingMessage.emit(events.js:166:7)的emitNone(events.js:72:20)处(_stream_readable.js:905:12)在process._tickCallback(node.js:388:17)的nextTickCallbackWith2Args(node.js:474:9)
我缺少应用配置和/或身份验证实施中的哪些步骤?
我已经深入研究了Mongoose文档,但我仍然无法找到我应该如何处理错误的信息query.exec().
var query = User.findOne({_id: userId});
var promise = query.exec(function(err) {
if (err) {
res.json(err);
return;
}
});
promise.then(function(user) {
res.json(user.name);
});
Run Code Online (Sandbox Code Playgroud)
当我传递不正确的userId时,我将Unhandled rejection CastError: Cast to ObjectId failed错误打印到控制台.
我认为res.json(err)后面的return语句将足以正确处理错误并阻止它在控制台中显示,但事实并非如此.我该怎么做呢?