使用Passport.js将Facebook数据链接到当前登录的用户

时间:2012-06-26 15:33:19

标签: node.js express oauth passport.js

我正在使用passport.js,如果我可以将facebook id链接到登录用户的帐户,我就会受伤。像这样:

passport.use( new FacebookStrategy({
        consumerKey: ---
        consumerSecret: ---
        callbackURL: "http://mycallback"
    },
    function(token, tokenSecret, profile, done) {
        if (user is logged in)
            user = User.addfacebookId(user, profile.id)
            done(user);
        }
    }   
));

1 个答案:

答案 0 :(得分:18)

有几种方法可以解决这个问题,但我认为最直接的方法之一是使用passReqToCallback选项。启用后,req成为验证回调的第一个参数,然后您可以检查req.user是否存在,这意味着用户已经登录。此时,您可以关联具有Facebook个人资料详细信息的用户,并为完成的回调提供相同的用户实例。如果req.user不存在,请照常处理。

例如:

passport.use(new FacebookStrategy({
    clientID: ---
    clientSecret: ---
    callbackURL: "http://mycallback"
    passReqToCallback: true
  },
  function(req, accessToken, refreshToken, profile, done) {
    if (req.user)
      // user is already logged in.  link facebook profile to the user
      done(req.user);
    } else {
      // not logged in.  find or create the user based on facebook profile
    }
  }   
));