使用 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