【发布时间】:2016-07-04 00:29:37
【问题描述】:
我正在使用带有 devise gem 的 rails api 来登录 Facebook。当我使用rails应用程序下的html链接直接登录时。它完美地工作。 现在,如果我尝试使用 angular2 移动到客户端并在 rails 应用程序中调用相同的路由。问题发生在重定向到 facebook 中。我可以上路,因为我已经设置了“cors rack gem”,但是当在后台“设计 gem”调用 facebook api 时,这个调用的来源为空。经过 3 小时的搜索,我没有找到让它工作的方法。
有人用 rails api 和 devise/omniauth 设置了角度(1 或 2)吗?
rails api 和 angular 应用在不同的域下
【问题讨论】:
-
嘿@naskaa,如果我理解正确,您想在不离开应用程序的情况下执行社交登录(即更改页面),对吗?
-
我想将 html 代码从 rails 应用程序移动到 angular2 客户端。我能够从 rails 应用程序(rails 应用程序下的 html)登录,但是如果我从 angular 应用程序使用 ajax 调用相同的路由,它会失败。我能够在我的 angularApp 和 Api 之间进行跨域调用。唯一的例外是这个登录路径,因为 Rails 应用程序将其称为外部域 facebook(设计 gem),并且在此调用中,请求标头中的来源为“null”。
-
但是你想避免被重定向还是什么?我不确定我是否理解在 html 中移动的问题。我认为您可能正在尝试使用角度 http 服务
$http.get等,但这会在 Facebook 尝试重定向用户时产生问题。 Facebook 需要物理页面重定向,因为他们需要执行安全提示等操作。但是您可以执行一些操作,例如在新窗口中打开 rails 路由并在传递身份验证数据后关闭它(您可以使用加密的websocket)。 -
是的,我刚刚重新阅读了您的评论。由于我上面解释的原因,您不能使用 ajax 来调用 facebook 重定向。如果可以的话,Facebook 将无法控制安全性和权限提示。
-
我可以让我的登录页面在rails应用程序中。在创建用户后,我重定向到 angular2 应用程序中的主页。这不是最好的方法,因为我绕过了这个问题,但我可以继续前进。我发布以了解基于令牌的身份验证。 github.com/sahat/satellizer/issues/858我将来可能会改变这种方法,谢谢你的帮助
标签: angularjs ruby-on-rails-4 devise omniauth-facebook