护照-facebook中callbackUrl和函数的区别

Posted

技术标签:

【中文标题】护照-facebook中callbackUrl和函数的区别【英文标题】:Difference between callbackUrl and function in passport-facebook 【发布时间】:2013-11-11 15:26:27 【问题描述】:

我正在尝试了解在将 passport-facebook 与 node/express 一起使用时 Facebook 身份验证的工作原理。

我对 callbackURL 和下面的函数感到困惑。

有人可以向我解释一下设置回调URL(这是成功登录尝试结束的地方吗?与登录后似乎也被调用的函数(accessToken,...))之间的区别。

passport.use(new FacebookStrategy(
    clientID: FACEBOOK_APP_ID,
    clientSecret: FACEBOOK_APP_SECRET,
    callbackURL: "http://localhost:3000/auth/facebook/callback"
  ,
  function(accessToken, refreshToken, profile, done) 
    User.findOrCreate( facebookId: profile.id , function (err, user) 
      return done(err, user);
    );
  
));

【问题讨论】:

【参考方案1】:

callbackURL 是 facebook 的网络服务器自己将在进程结束时使用的 URL。 Facebook 的服务器将发送一个 301 重定向响应,导致用户的浏览器导航到该 URL。所以这本质上是您发送给 facebook 本身的配置选项,passport.js 正在处理发送时间和地点的细节。当整个 oauth 舞蹈完成后,回调函数是护照将控制权交还给您的代码并说“嘿,看起来它有效。这是登录用户的好东西”,所以你可以做你的 @987654322 @。该函数内部的细节通常会因应用程序而异,而 oauth dance 总是相同的。这就是为什么护照在那里使用函数回调的原因。它允许您为特定于应用程序或自定义逻辑的挂钩。

【讨论】:

但是 callbackURL 是如何映射到 Passport 模块的呢? Passport 添加路由来表示浏览器用于启动身份验证的 URL 以及浏览器在成功身份验证后将请求的最终 facebook 回调的 URL。这两者都是由app.get 调用显式配置的,它必须与app.use 调用完全匹配,才能使一切正常工作。有关详细信息,请参阅护照指南的 facebook 示例。 该指南显示了向应用显式添加两条路由的代码。所以看起来有两组路线。手动添加的和 Passport 自动添加的。 对不起,让我澄清一下。 Passport 提供路由处理函数(实现),但应用程序开发人员必须明确编码将 URL 映射到护照函数的快速路由以及安装护照中间件。 Passport 不会自动添加任何路由或中间件。它只是提供实现功能。现在清除吗? 我认为您应该发布一个新问题,而不是扩展此评论线程。所有这些东西(路由、URL、回调、中间件、策略、选项、重定向等)都非常令人困惑。 Oauth2 相当复杂。我不确定我能否为您提供充分的帮助。

以上是关于护照-facebook中callbackUrl和函数的区别的主要内容,如果未能解决你的问题,请参考以下文章

护照-facebook-token vs 护照-facebook

使用带护照本地的护照Facebook策略时无法将用户序列化到会话中

混合护照-facebook和护照-jwt的最佳方法是啥?

req.user 未定义 - 节点 + 快递 + 护照-facebook

护照Facebook登录中的“对于需要预检的跨域请求是不允许的”错误?

Facebook iOS SDK 和护照-facebook 身份验证