新しいユーザー (またはテスト ユーザー) が Facebook (キャンバス) から私のアプリにアクセスするたびに、空のページが表示されます。
ユーザーがアプリに直接移動すると、機能します。ユーザーは Facebook から許可ダイアログを取得し、要求された許可を付与する必要があります。この後、ユーザーは Facebook キャンバスから、または *www.MY_APP.com* から直接アプリを使用できます。
問題について私が知っていること:
- これは、Facebook アプリの権限を付与していない新規/テスト ユーザーに対して発生します。
- 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
omniauth.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
誰でも私を助けてくれることを願っています。