【问题标题】:Authlogic Facebook Connect SnafuAuthlogic Facebook Connect 混乱
【发布时间】:2010-03-08 21:06:55
【问题描述】:

我有一个配置了 authlogic 和 authlogic_facebook_connect 的应用程序,但每次我点击“连接”按钮时,我的 UserSession 验证失败,提示“您没有提供任何身份验证详细信息”

authlogic_facebook_connect 不应该绕过登录/密码验证吗?我错过了一些配置步骤吗?

任何帮助将不胜感激!

【问题讨论】:

标签: ruby-on-rails facebook authlogic


【解决方案1】:

嘿,也许我可以帮忙解决这个问题,不久前刚刚遇到这个问题......

Facebook 连接已过时。现在所有酷孩子都在使用带有 OAuth 的 Facebook Graph。 Facebook 团队甚至关闭了 Facebook Connect 的文档。

无论如何,对于 Authlogic Facebook 连接来说,它根本就不再工作了。

最后,我继续使用 Authlogic 进行正常的登录和帐户管理,但对于 Facebook 连接,我编写了自己的代码。

您可能使用过 facebooker gem。卸载该 gem,但保留 config/facebooker.yml 文件。

试试这个:

  1. 通过在 config/initializers/load_config.rb 中添加此代码来继续使用 config/facebooker.yml(您需要创建此文件)

    config = YAML.load_file("#{Rails.root}/config/facebooker.yml") || {}

    facebook_config = config['common'] || {}

    facebook_config.update(config[Rails.env] || {})

    FB_CONFIG = facebook_config.symbolize_keys

  2. 将此代码添加到您的 user_controller.rb 中:

def facebook_oauth_callback 如果不是 params[:code].nil? callback = url_for(:host => APP_CONFIG[:host], :controller => 'gallery/user', :action => 'facebook_oauth_callback') url = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{FB_CONFIG[:application_id]}&redirect_uri=#{callback}&client_secret=#{FB_CONFIG[:secret_key]}&code=# {CGI::escape(params[:code])}") http = Net::HTTP.new(url.host, url.port) http.use_ssl = (url.scheme == 'https') tmp_url = url.path + "?" + url.查询 请求 = Net::HTTP::Get.new(tmp_url) 响应 = http.request(请求) 数据 = response.body access_token = data.split("=")[1] 如果 access_token.blank? flash[:notice] = '通过 Facebook 连接时出错,请稍后再试。' 别的 url = URI.parse("https://graph.facebook.com/me?access_token=#{CGI::escape(access_token)}") http = Net::HTTP.new(url.host, url.port) http.use_ssl = (url.scheme == 'https') tmp_url = url.path + "?" + url.查询 请求 = Net::HTTP::Get.new(tmp_url) 响应 = http.request(请求) user_data = response.body user_data_obj = JSON.parse(user_data) @user = User.new_or_find_by_facebook_oauth_access_token(access_token, {:user_data => user_data_obj}) 如果@user.new_record? 会话[:user] = @user session[:external_app] = "脸书" redirect_to(:action => 'new_details') 别的 user_session = UserSession.create(@user) flash[:notice] = "登录成功。" redirect_back_or_default root_url 结尾 结尾 结尾 结尾 def create_facebook redirect_to("https://graph.facebook.com/oauth/authorize?client_id=#{FB_CONFIG[:application_id]}&redirect_uri=" + url_for(:host => APP_CONFIG[:host], :controller => 'gallery/user', :action => 'facebook_oauth_callback') + "&scope=email,offline_access") 结尾
  1. 在您的用户模型 (app/models/user.rb) 中添加 find 方法:
def self.new_or_find_by_facebook_oauth_access_token(access_token, options = {}) 用户 = User.find_by_facebook_oauth_access_token(access_token) 如果user.blank? #code 在此处创建新用户 结尾 用户 结尾
  1. 在视图中添加指向操作 create_facebook 的链接,类似于

    <%= link_to image_tag('gallery/button-facebook.png', :title => "register with Facebook", :alt => "register with Facebook"), {:action => 'create_facebook'}, {:target => '_parent'} %>

说明

  1. 在第一步中,您创建了一个文件以从 facebooker.yml 获取配置数据
  2. 在第二步中,您基本上创建了两个函数,一个用于将用户发送到 facebook 站点 (create_facebook),另一个用于捕获回调数据 (facebook_oauth_callback) 想法来自此页面:http://www.wisejive.com/2010/05/facebook-oauth-on-rails.html
  3. 在第三步中,您刚刚在 User 模型中添加了一个方法,用于根据从 facebook 返回的信息查找或创建新用户(如果未找到)。

该代码仅适用于我的项目,不要只是复制粘贴,而是逐行学习。随着时间的推移,我意识到最好使用您可以理解的简单代码,而不是使用其他复杂的插件,当事情出错时您无法修复......

【讨论】:

  • 感谢 jaycode,我现在正在使用 OAuth2,这并没有给我带来任何麻烦。
【解决方案2】:

我遇到了这个问题,我认为我的问题在于我的电话

<%= authlogic_facebook_login_button :controller => 'account', :js => :jquery %>

注意我必须传入控制器。无论如何,我认为这是我的解决方案,现在又遇到了另一个问题,我正在使用 facebook 进行身份验证,但每次都会在我的网站上创建一个新用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2011-01-26
    相关资源
    最近更新 更多