尝试通过javascript和omniauth-facebook对Facebook进行身份验证时出现OAuth错误

时间:2012-07-12 01:23:28

标签: javascript facebook ruby-on-rails-3 omniauth

尝试通过他的Railscast实现Ryan JS登录的JS实现:http://railscasts.com/episodes/360-facebook-authentication

服务器端auth非常棒 - 没有任何问题 - 但是通过JS弹出窗口尝试它会一直给我这个错误:

enter image description here

另外,我的服务器输出记录:

(facebook) Callback phase initiated.
(facebook) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError, OmniAuth::Strategies::OAuth2::CallbackError

我的直觉告诉我原因是没有数据传递给回调URL(来自WSan底部的Ryan JS代码):

window.location = '/auth/facebook/callback' if response.authResponse

但我不太了解Omniauth如何确切地知道。谁能帮我这个?如果您需要我发布特定文件,请告诉我,尽管Ryan已经在他的截屏视频中提到了所有内容。


UPDATE :所以我刚刚找到了this post,看起来JS正在调用,所以我很难过。 :(


另一个更新:我似乎可以使用浏览器控制台操纵我的状态。调用FB.login()会提示我一个窗口,我可以填写,然后它会让我登录。运行

FB.getLoginStatus(function(resp) { console.log(resp.status); });

...确认我已使用有效凭据连接。所以现在我真的很困惑,为什么这不起作用......

供参考,这是我的JS加载到页面上:

jQuery ->
  $('body').prepend '<div id="fb-root"></div>'

  $.ajax
    url: "#{window.location.protocol}//connect.facebook.net/en_US/all.js"
    dataType: 'script'
    cache: true

window.fbAsyncInit = ->
  FB.init(appId: '<%= ENV["FACEBOOK_APP_ID"] %>', cookie: true)

  $('*[data-js="fb_login"]').click (e) ->
    e.preventDefault()
    FB.login (response) ->
      window.location = '/auth/facebook/callback' if response.authResponse

  $('*[data-js="logout"]').click ->
    FB.getLoginStatus (response) ->
      FB.logout() if response.authResponse
      true

是的,我已确认<%= ENV["FACEBOOK_APP_ID"] %>正在返回正确的Facebook App ID。

1 个答案:

答案 0 :(得分:0)

在“标准”端口80/443以外的任何其他端口上使用JS SDK存在一些问题。

尝试设置本地测试计算机,以便它使用其中一个端口(80表示HTTP,443表示HTTPS),并查看问题是否仍然存在。