質問

authlogic と authlogic_facebook_connect を使用してアプリケーションを構成しましたが、「接続」ボタンをクリックするたびに、UserSession が検証に失敗し、「認証の詳細が提供されていません」というメッセージが表示されます。

authlogic_facebook_connect はログイン/パスワード認証をバイパスするものではないでしょうか?何か設定手順が抜けているのでしょうか?

助けていただければ幸いです。

役に立ちましたか?

解決

ねえ、これについては私がお手伝いできるかもしれません。つい最近この問題が発生したばかりです...

Facebook コネクトは時代遅れです。クールな若者たちは皆、OAuth を使用して Facebook Graph を使用しています。Facebook チームは Facebook Connect のドキュメントさえ閉鎖しました。

とにかく、それは Authlogic Facebook Connect にも当てはまり、単にもう機能しません。

結局、通常のログインとアカウント管理には Authlogic を使い続けましたが、Facebook Connect については独自のコードを作成しました。

おそらく 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
  if not 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.query
    request = Net::HTTP::Get.new(tmp_url)
    response = http.request(request)
    data = response.body
    access_token = data.split("=")[1]
    if access_token.blank?
      flash[:notice] = 'An error occurred while connecting through Facebook, please try again later.' 
    else
      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.query
      request = Net::HTTP::Get.new(tmp_url)
      response = http.request(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})

      if @user.new_record?
        session[:user] = @user
        session[:external_app] = "Facebook"
        redirect_to(:action => 'new_details')
      else
        user_session = UserSession.create(@user)
        flash[:notice] = "Successfully logged in."
        redirect_back_or_default root_url
      end
    end
  end
end

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")
end
  1. User モデル (app/models/user.rb) 内に find メソッドを追加します。
      def self.new_or_find_by_facebook_oauth_access_token(access_token, options = {})
        user = User.find_by_facebook_oauth_access_token(access_token)
        if user.blank?
          #code to create new user here
        end
        user
      end
  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. 2 番目のステップでは、基本的に 2 つの関数を作成しました。1 つはユーザーを Facebook サイトに送信する関数 (create_facebook)、もう 1 つはコールバック データをキャプチャする関数 (facebook_oauth_callback) です。アイデアはこのページから得られました。 http://www.wisejive.com/2010/05/facebook-oauth-on-rails.html
  3. 3 番目のステップでは、Facebook から返された情報に基づいてユーザーを検索するか、見つからない場合は新規作成するメソッドを User モデル内に追加しました。

コードは私のプロジェクトでのみ機能します。ただコピー&ペーストするだけでなく、一行ずつ学習してください。時間が経つにつれて、問題が発生したときに修正できない他人の複雑なプラグインを使用するよりも、理解できるシンプルなコードを使用する方が良いことに気づきました...

他のヒント

私はこの問題を抱えていたが、私はが考えるの私の問題だったと私の呼び出しで、

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

私は、コントローラに渡すために持っていた注意してください。私はこれが私の解決策は、とにかく、私はfacebookでOK認証てる今ラインのさらに下に別の問題がヒットだったと思うが、それは私のサイトたびに新しいユーザーを作成しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top