使用 passport.js、sails.js API 和 ember.js 登录 Facebook

Posted

技术标签:

【中文标题】使用 passport.js、sails.js API 和 ember.js 登录 Facebook【英文标题】:Facebook login with passport.js, sails.js API and ember.js 【发布时间】:2015-06-26 14:11:16 【问题描述】:

我正在设置这个 Sails 项目,我使用 PassportJS、通过 sails-generate-auth 和 JWT(使用 this 作为指南)登录。我正在尝试尽可能多地将 api 与 Ember 应用程序分离,以便我可以为 ios 等使用相同的 API。由于护照使用回调来处理 Facebook 身份验证,我如何通过 AJAX 登录?

我能够使用 AJAX GET 到 /auth/facebook 像这样通过护照 js 成功登录 Facebook

var url = config.api + '/auth/facebook'
var controller = this;
Ember.$.get( url, function ( data ) 
  // This is never called because Facebook redirects
  localStorage.private_token = data.token;
  controller.transitionToRoute('profile', data.user);
);

但是当 Facebook 重定向时,它会返回到 API,而不是前端应用程序。但是,如果我将后端配置为在回调后重定向到前端应用程序,我就会对前端应用程序产生依赖,这是我想避免的。我以前从未做过 Facebook 身份验证,但我已经使用 API 令牌有一段时间了。

有什么方法可以做我想做的事吗?还是应该直接从passport.callback 重定向到前端应用?

更新

经过一番搜索,我发现了这个答案:passport.js RESTful auth

似乎我无法实现我想要的,因为 Facebook 只公开了基于重定向的身份验证,而不是异步或 JSON 身份验证。很高兴知道...如果您愿意,请标记为重复。

【问题讨论】:

【参考方案1】:

您的应用程序还必须实现一个重定向 URL,Facebook 将在用户批准您的应用程序访问后将其重定向到该 URL。

来自 Passport.js Facebook guide(查看配置)。

因此,您必须将您的 ember 应用状态/url 设置为重定向 url,例如http://localhost/#/welcome

【讨论】:

Sabbir,我确实了解回调是如何工作的,并且我可以通过将重定向回调设置到我的 ember 应用程序来解决它。我的问题是它需要我的 API 了解我的前端应用程序,如果可能的话,我想避免这种情况。理想情况下,我想要一个允许我在没有重定向的情况下通过 Facebook 进行身份验证的解决方案,这样我就可以使用 AJAX 响应。我不确定这是否可行,因为我还是 Facebook auth 的新手。 您可以设置一个路由来处理 facebook 重定向并在您正在寻找的情况下发回 json 响应。在前端,您始终可以设置如何处理该响应。 我已经有一个发出 JSON 的路由,但是当 Facebook 重定向到该路由时,控制器必须知道前端应用程序才能重定向或呈现。如果可能的话,这是我试图避免的。 重定向或渲染基于什么? 所以我的目标是在 Sails API 中与前端应用程序无关。我的问题是这是重定向流程:1. 用户在 Ember 应用程序中单击使用 FB 登录,2. FB 登录用户并重定向到 Sails 控制器。 3. Sails 控制器必须重定向回前端应用程序,这意味着 Sails 知道前端应用程序。这是我要避免的。

以上是关于使用 passport.js、sails.js API 和 ember.js 登录 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js + Passport.js 通过 websockets 进行身份验证

使用 passport.js、sails.js API 和 ember.js 登录 Facebook

使用 Passport.js 和 Sails.js 注册后如何重定向到特定位置?

Passport.js 在 req.login 上失败

Sails.js 0.11 和护照:“缺少凭据”错误

登录时如何“记住”用户-passport.js-phonegap