我正在使用 PassportJS 来处理浏览器和移动客户端的 FB 身份验证。对于网络用户,我正在使用 Passport FacebookStrategy,这按预期工作。我还想允许移动客户端访问我的 API。我正在尝试使用 Passport FacebookTokenStrategy 来促进这一点。这似乎解决了一个小问题。当移动客户端向服务器发出 GET 请求时,将使用 FacebookTokenStrategy 并调用验证回调函数。在验证功能中,我可以看到用户配置文件可用,因此身份验证成功。但是,404 的 HTTP 状态会在响应中发送回移动客户端。我不确定如何正确配置它。这是我目前正在尝试的:
// Web based auth
passport.use(new FacebookStrategy({
clientID: Config.facebook.clientID,
clientSecret: Config.facebook.clientSecret,
callbackURL: "http://localhost/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate(profile, function(err, user){
done(err, user);
});
}
));
// Mobile client auth
passport.use(new FacebookTokenStrategy({
clientID: Config.facebook.clientID,
clientSecret: Config.facebook.clientID
},
function(accessToken, refreshToken, profile, done) {
console.log(profile);
User.findOrCreate(profile, function(err, user){
done(err, user);
});
}
));
// Redirect the user to Facebook for authentication. When complete,
// Facebook will redirect the user back to the application at
// /auth/facebook/callback
exports.fb_auth = passport.authenticate('facebook',{ scope: 'email' });
// Facebook will redirect the user to this URL after approval. Finish the
// authentication process by attempting to obtain an access token. If
// access was granted, the user will be logged in. Otherwise,
// authentication has failed.
exports.fb_callback = passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/login' });
// Mobile Authentication
exports.mobile_fb_auth = passport.authenticate('facebook-token');
我应该提供 passport.authenticate('facebook-token'); 有一些额外的“onsuccess”回调?这在 Web 客户端的上下文中是有意义的,但我不确定应该如何使用 facebook-token 策略来处理。