1

我尝试facebook OAUTH使用 Sails.js/Node.js 和 Mongo 作为我的后端来实现我的应用程序(Web 和移动)。我编写了一个专用函数来访问endpoints每个应用程序,因为 webApp 需要回调 URL,而移动设备不需要。我的代码截图如下。但是,我注意到这两个给了我两个不同的 Facebook id。我很困惑,facebookId不应该是唯一的吗?我正在使用这两个模块 FacebookStrategy = require('passport-facebook').Strategy FacebookTokenStrategy = require('passport-facebook-token').Strategy

网络应用Strategy

passport.use(new FacebookStrategy({
clientID      : facebook.clientID,
clientSecret  : facebook.clientSecret,
profileFields : ['id', 'email', 'last_name', 'first_name', 'gender', 'link', 'verified', 'updated_time', 'timezone', 'age_range'],
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
authenticate(req, accessToken, refreshToken, profile, done);
}
));

authenticate function being pointed at

 var authenticate = function (accessToken, refreshToken, profile, done) {
User.findOne({facebookId: profile.id}).then(function (user){
    if (user) {
        return [user, {accessToken: accessToken, refreshToken: refreshToken}]
    } else {
        var data = {
            facebookId: profile.id,
            firstname: profile._json.first_name,
            lastname: profile._json.last_name,
            email: profile._json.email,
            gender: profile._json.gender,
            fb_profile_url: profile._json.link,
            fb_verified: profile._json.verified,
            fb_updated_time: profile._json.updated_time,
            phonenumber: profile._json.phone
        }
        var userQry = User.create(data);
    }
    return [userQry, {accessToken: accessToken, refreshToken: refreshToken}]
})
.spread(function (user, credentials){
    if (user) {
        return done(null, [user, credentials]);
    } else {
        return done(null, null);
    }
})
.catch(function (err){
    return done(err, null);
});
}

移动应用策略

4

0 回答 0