Authlogic Facebook Connect Snafu

a10*_*10s 8 facebook ruby-on-rails authlogic

我有一个配置了authlogic和authlogic_facebook_connect的应用程序,但是每次单击"连接"按钮时,我的UserSession都会失败验证,说"你没有提供任何验证细节"

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

任何帮助,将不胜感激!

jay*_*ode 2

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

Facebook 连接已过时。现在所有的酷孩子都在使用 Facebook Graph 和 OAuth。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 ?
    回调 = url_for(:host => APP_CONFIG[:host], :controller => '图库/用户', :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(请求)
    数据 = 响应.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(请求)
      用户数据 = 响应.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?
        会话[:用户] = @用户
        会话[:external_app] = "Facebook"
        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 => '图库/用户', :action => 'facebook_oauth_callback') +
    “&范围=电子邮件,offline_access”)
结尾
  1. 在您的 User 模型 (app/models/user.rb) 中添加 find 方法:
      def self.new_or_find_by_facebook_oauth_access_token(access_token, 选项 = {})
        用户 = User.find_by_facebook_oauth_access_token(access_token)
        如果用户.空白?
          #在这里创建新用户的代码
        结尾
        用户
      结尾
  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 返回的信息查找用户,或者在未找到的情况下创建新用户。

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