javascript - Omniauth Facebook 登录无法正常工作

标签 javascript jquery ruby-on-rails facebook heroku

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

我刚刚完成 Sergio Tapia Gutierrez 在 https://coderwall.com/p/bsfitw 上编写的教程。正如评论中所示,教程步骤对于大多数用户来说都是正确的。但不适合我。

我已经按照他在帖子中提到的方式完成了所有操作,但我现在遇到了很多错误。

首先是识别脚本。尽管我已按照教程中所述将每一行代码放入我的应用程序中,但我的 Rails 应用程序似乎无法识别用户是否已登录。 奇怪的是,当我点击多次时,它开始识别并登录我。

接下来让我很烦恼的是 javascript。我在 Heroku 上托管我的应用程序 - 有时 JS 似乎对鼠标点击没有反应(实际上是 jquery)。我还为 Facebook 对话框放置了一个弹出脚本 - 它也不会弹出。

很抱歉我无法正确解释它 - 我是 Rails 新手,现在我很迷茫 - 我不知道真正的问题在哪里,这些只是猜测。

Facebook.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: '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

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>

以及来自应用程序 Controller 的用户状态检查器

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

最后, session Controller 代码

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

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

最佳答案

要使其在生产环境中正常工作,您必须对 Facebook 应用设置进行一些更改

  1. 您的应用域应为 herokuapp.com

  2. 网站网址http://yourappname.herokuapp.com/

  3. 并且不应处于沙盒模式

关于javascript - Omniauth Facebook 登录无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20441946/

相关文章:

javascript - React onclick 在非类组件上隐藏此组件

javascript - 想要制作一个基于 URL 的音频播放器,但 Javascript 不起作用

javascript - JQuery 仅在点击时运行

javascript - 在 jQuery 中使用元素内容进行计算

javascript - 与非 Javascript 服务器相比,使用基于 Javascript 的服务器有哪些优势?

mysql - rails 上的 ruby : rake aborted bad file descriptor

ruby-on-rails - has_secure_password 不加密 password_digest Ruby on Rails

javascript - 使用网络音频 API 播放多个声音时如何消除噪音?

javascript - window.getselection 在 Android 中不起作用

javascript - 使用 JavaScript 或 jQuery 创建序列步骤 [动画]