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

标签 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);
        }
    }   
));

最佳答案

有几种方法可以解决这个问题,但我认为最直接的方法之一是使用 passReqToCallback 选项。启用后,req 成为验证回调的第一个参数,从那里您可以检查 req.user 是否存在,这意味着用户已经登录. 那时,您可以将用户与 Facebook 个人资料详细信息相关联,并向 done 回调提供相同的用户实例。如果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
    }
  }   
));

关于node.js - 使用 Passport.js 将 facebook 数据链接到当前登录的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11210817/

相关文章:

javascript - Node.js express 验证器验证 req.body 不为空

javascript - 如何在 Jade 中创建可重用的标记

javascript - 在 ExpressJS 中创建身份验证 header 。 Java 到 Javascript 的翻译

web-services - 如何验证 Google 身份验证 API 访问 token ?

ruby - OAuth 给我 401 错误

javascript - 隐藏回调的变量是不好的做法吗?

node.js - mongodb : find() query in a collection

javascript - 如何在 Windows 8 JavaScript (Metro) 中将 twitter oAuth 请求 token 转换为访问 token

node.js - 网络服务器之上的http服务器

arrays - Hyperledger 结构 Node 错误 : 2 UNKNOWN: Stream removed Unhandled error for request GET/api/fabric/1_0/channels: