我一直在尝试为我的最新项目创建一个用户身份验证系统。我决定不存储任何密码和内容,并使用社交网络来允许人们在我的项目中使用特定功能(发布文章等)。
我刚刚完成 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 应用设置进行一些更改
您的应用域应为 herokuapp.com
并且不应处于沙盒模式
关于javascript - Omniauth Facebook 登录无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20441946/