1

新しいユーザー (またはテスト ユーザー) が Facebook (キャンバス) から私のアプリにアクセスするたびに、空のページが表示されます。

ユーザーがアプリに直接移動すると、機能します。ユーザーは Facebook から許可ダイアログを取得し、要求された許可を付与する必要があります。この後、ユーザーは Facebook キャンバスから、または *www.MY_APP.com* から直接アプリを使用できます。

問題について私が知っていること:

  1. これは、Facebook アプリの権限を付与していない新規/テスト ユーザーに対して発生します。
  2. Facebook キャンバスからの直接アクセスでのみ発生します。

Facebookから許可ダイアログを表示できないと思いますが、理由はわかりません。

私のアプリは ruby​​ rails で開発されており、ログインには OmniAuth 1.4.0 を使用しています。

gemファイル

gem 'omniauth'
gem 'omniauth-facebook', '1.4.0'
gem 'oauth2'
gem 'koala'

routes.rb:

match '/canvas'                  => 'sessions#facebook_canvas'
match '/auth/:provider/callback' => 'sessions#create',             :as => :create_session

omn​​iauth.rb 初期化子:

Rails.application.config.middleware.use OmniAuth::Builder do
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
  provider :facebook, APP_ID, APP_SECRET,
       {:scope   => 'email, user_groups, friends_groups, read_stream, read_friendlists, friends_likes, friends_status, offline_access',
        :display => 'popup',
        :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}} }
end

sessions_controller :

# modified sample code from OmniAuth to handle the signed request
def facebook_canvas
   session[:canvas]         = true
   session[:signed_request] = params[:signed_request]
   # we just redirect to /auth/facebook here which will parse the
   # signed_request FB sends us, asking for auth if the user has
   # not already granted access, or simply moving straight to the
   # callback where they have already granted access.
   #
   # we pass the state parameter which we can detect in our callback
   # to do custom rendering/redirection for the canvas app page
   redirect_to "/auth/facebook?signed_request=#{request.params['signed_request']}&state=canvas"
end

# create a session, when the user 
def create
   auth = request.env["omniauth.auth"]
   user = User.from_omniauth(env["omniauth.auth"])
   if user  
      session[:fb_token] = auth["credentials"]["token"] if auth['provider'] == 'facebook'     
      redirect_to_target_or_default root_url #, :notice => "Logged in successfully."
      redirect_to confirm_abg_path(:user => user.id)
   else
      flash.now[:alert] = "Invalid login or password."
      redirect_to root_url
   end
end

誰でも私を助けてくれることを願っています。

4

0 に答える 0