使用MEAN堆栈

时间:2017-02-16 00:56:27

标签: angularjs node.js google-oauth2

我对我正在设计的简单应用程序的架构有疑问。

我的基于休息的api服务器位于http://localhost:3000的节点中 我的客户是在http://localhost:4200

的Angular 2中编写的

在开发我的休息节点api服务器时,我成功实现了使用http://localhost:3000/auth/google测试的护照google身份验证, 我被重定向到谷歌登录页面,然后在登录后进一步重定向到我的休息节点api服务的/我的个人资料

现在我正在尝试做同样的事情,但起点是我的角度客户端,它调用节点api服务器来调用google auth。所以我的初始请求从 执行http.get的http://localhost:4200 http://localhost:3000/auth/google。希望谷歌认证页面显示我验证,但我得到以下错误

  

XMLHttpRequest无法加载   https://accounts.google.com/o/oauth2/v2/auth?response_type=code&redirect_ur ... = 1000090953925-p7jof0qa284ihknb5sor3i4iatnqarvo.apps.googleusercontent.com。   重定向   ' https://accounts.google.com/o/oauth2/v2/auth?response_type=code&redirect_ur ... = 1000090953925-p7jof0qa284ihknb5sor3i4iatnqarvo.apps.googleusercontent.com'   至   ' https://accounts.google.com/ServiceLogin?passive=1209600&continue=https://a ... sercontent.com%26from_login%3D1%26AS%3D60339aeceb428c&安培;的OAuth = 1&安培; SARP = 1&安培; SCC = 1'   被CORS政策阻止:No' Access-Control-Allow-Origin'   标头出现在请求的资源上。起源' null'是   因此不允许访问。

我已将网址包含在授权JavaScript来源下的google auth页面中的两个端口 http://localhost:3000 http://localhost:4200  并在授权重定向URI中 我已经包括在内 http://localhost:3000/auth/google/callback

节点api服务器中的代码

app.get(' / auth / google',passport.authenticate(' google',{范围:['个人资料','电子邮件& #39;]}));       app.get(' / AUTH /谷歌/回调&#39 ;,                 passport.authenticate(' google',{                         successRedirect:' / profile',                         failureRedirect:' / users'                 }),               );

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

两件事:因为后端和前端位于不同的端口上,您需要让后端包含CORS header 'Access-Control-Allow-Origin'的回复。如果你使用快递,那会是这样的:

res.header('Access-Control-Allow-Origin', '*');

此外,只需确保浏览器中的地址始终为 http :// localhost而非 文件 :// localhost

答案 1 :(得分:0)

你所要做的就是 发送$window.location.href="URL"

希望有所帮助