除非从同一个应用程序提供,否则Node.js + Passport.js无法对不同的客户端进行身份验证

时间:2015-06-18 16:02:48

标签: node.js authentication sails.js passport.js

我尝试使用node作为我的服务器技术构建RESTful API。

我想构建我的API,以便任何客户端都可以使用它。在不久的将来,我希望能够构建一个iOS应用程序和一个Android应用程序。到目前为止测试,我一直在使用帆中的视图。

我已经添加了Passportjs来帮助通过其他提供商验证用户,当我在我的sails应用程序中使用它时,一切似乎都很有用。

我创建了一个不同的应用程序,它使用我的API和AngularJS来测试它。我虽然遇到了障碍。我试图点击我的auth端点,但我一直都是错误。

每当我尝试点击/auth/:provider时,它都会尝试执行流程,但在尝试转到提供商的页面进行身份验证时会出错:

XMLHttpRequest cannot load https://api.twitter.com/oauth/authenticate?oauth_token={TOKENREMOVED}. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

在我的角色应用程序中,我正在做:

$http.get('http://localhost:1337/auth/twitter').then(){...})

当我尝试使用我的节点应用程序中的视图登录流程时,它可以正常工作。

我猜我是否甚至无法在不同的角度应用程序中执行身份验证流程,我甚至无法在iOS或Android上执行此操作。

我应该做些什么吗?我真的很困惑如何通过这一点,所以任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要将用户的浏览器重定向到Twitter的/oauth/authenticate网址,然后在Angular中使用$window.location()执行此操作。 $http.get()方法发出XHR请求,这与重定向不同。