Javascript Omniauth Facebook登录不工作

Javascript Omniauth Facebook登录不工作,javascript,jquery,ruby-on-rails,facebook,heroku,Javascript,Jquery,Ruby On Rails,Facebook,Heroku,我一直在尝试为我的最新项目创建一个用户身份验证系统。我决定不存储任何密码和内容,而是使用社交网络来允许人们在我的项目中使用特定功能(文章等) 我刚刚完成了塞尔吉奥·塔皮亚·古铁雷斯的一篇关于。正如注释中所示,教程步骤对大多数用户都是正确的。但对我来说不是 我做的每件事都和他在帖子中提到的一样,但我现在面临着不少错误 首先,它是识别脚本。我的rails应用程序似乎无法识别用户是否登录,尽管我已经在我的应用程序中输入了教程中提到的每一行代码。 奇怪的是,当我多次单击时,它开始识别并登录我 下一件让我

我一直在尝试为我的最新项目创建一个用户身份验证系统。我决定不存储任何密码和内容,而是使用社交网络来允许人们在我的项目中使用特定功能(文章等)

我刚刚完成了塞尔吉奥·塔皮亚·古铁雷斯的一篇关于。正如注释中所示,教程步骤对大多数用户都是正确的。但对我来说不是

我做的每件事都和他在帖子中提到的一样,但我现在面临着不少错误

首先,它是识别脚本。我的rails应用程序似乎无法识别用户是否登录,尽管我已经在我的应用程序中输入了教程中提到的每一行代码。 奇怪的是,当我多次单击时,它开始识别并登录我

下一件让我非常恼火的事情是javascript。我在Heroku上托管我的应用程序——有时候JS似乎对鼠标点击没有反应(实际上是jquery)。我还为Facebook对话框设置了一个弹出脚本——它也不会弹出

很抱歉,我不能很好地解释这一点——我是Rails新手,现在我完全迷路了——我不知道真正的问题在哪里,这些只是猜测

Facebook.js.coffee

    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: 'MyAppId(i've put it here, can't show ya :)', cookie: true)

      $('#sign_in').click (e) ->
        e.preventDefault()
        FB.login (response) ->
          window.location = '/auth/facebook/callback' if response.authResponse

      $('#sign_out').click (e) ->
        FB.getLoginStatus (response) ->
          FB.logout() if response.authResponse
        true
jQuery->
$('body')。前缀(“”)
$.ajax
url:“#{window.location.protocol}//connect.facebook.net/en#u US/all.js”
数据类型:“脚本”
缓存:真
window.fbAsyninit=->
init(appId:'MyAppId(我把它放在这里,不能显示给你:)',cookie:true)
$(“#登录”)。单击(e)->
e、 预防默认值()
FB.login(响应)->
window.location='/auth/facebook/callback'if response.authResponse
$(“#注销”)。单击(e)->
FB.getLoginStatus(响应)->
FB.logout()如果response.authResponse
真的
application.html.erb中的一段代码

<div id="user-widget">
  <% if current_user %> 
    Welcome <strong><%= current_user.name %></strong>!
    <%= link_to "Sign out", "#", id: "sign_out" %>
  <% else %>
    <%= link_to "Sign in with Facebook", "#", id: "sign_in" %>
  <% end %>
</div>

欢迎光临!
来自应用程序控制器的用户状态检查程序

class ApplicationController < ActionController::Base


  private
  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end
  helper_method :current_user
end
class ApplicationController
最后,会话控制器代码

class SessionsController < ApplicationController
  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to articles_path, :notice => "Logged in"
  end

  def destroy
    session[:user_id] = nil
    redirect_to articles_path, :notice => "Logged out"
  end
end
class sessioncontroller“已登录”
结束
def销毁
会话[:用户\u id]=无
重定向到文章路径:notice=>“注销”
结束
结束

更新我已经检查了JS控制台。它不断地吐出这句话——“当用户已经连接时调用FB.login()”,这是什么意思?用户似乎没有连接,但却不断弹出连接。

要使其在生产中发挥作用,您必须在facebook应用程序设置中进行一些更改

  • 你的应用程序域应该是herokuapp.com

  • 网站url

  • 并且不应处于沙箱模式


  • 所以,更清楚一点,您并不总是能够单击并登录,而且javascript看起来很脆弱?是的。当我在本地运行我的应用程序时,它似乎工作得很好——如果我点击登录/退出div,就会弹出一个窗口。在Heroku上,并不是它不读取我的点击,而是控制台显示了一些活动,但什么也没有发生,只是rails代码调用了重定向。你的控制器代码在哪里,用于创建与应用程序的会话?仅仅登录Facebook是不够的。您的
    /auth/facebook/callback
    操作应获得一个身份验证令牌,您可以从该令牌在应用程序中创建会话。我看不到你的会话控制器。谢谢你的提示,但这也没有帮助-我以前已经完成了这些步骤。一点运气都没有-似乎应用程序不想识别任何人。您使用的是哪个
    omniauth facebook
    版本?对我来说,它与示例中的1.4.0兼容,但与1.5.0、1.6.0.rc1不兼容