2012-07-31 6 views
0

다음과 같은 문제가 있습니다. 내 앱이 Facebook 앱으로 실행되고 있지만 처음에는 사용자가 Facebook 권한을 수락하면 올바른 URL로 리디렉션되지만 Facebook (캔버스) . 어떻게 해결할 수 있습니까?Omniauth + Devise 리디렉션 오류

devise.rb : config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET'], scope: "email,publish_stream"

응용 프로그램/컨트롤러/omniauth_callback_controller.rb

class OmniauthCallbacksController < Devise::OmniauthCallbacksController 

     def passthru 
     render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false 
     end 


     def facebook 

     @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) 

     if @user.persisted? 
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 

      sign_in_and_redirect @user, :event => :authentication 
     else 
      session["devise.facebook_data"] = request.env["omniauth.auth"] 
      redirect_to root_path 
     end 
     end 

     def after_sign_in_path_for(resource) 
     inicio_path 
     end 
    end 

routes.rb

Pl::Application.routes.draw do 



     ActiveAdmin.routes(self) 

     mount Resque::Server, :at => "/resque" 

     devise_for :admin_users, ActiveAdmin::Devise.config 

     devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" } 

     devise_scope :user do 
     get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru' 
     end 

     match 'states' => 'game_plays#states' 
     match 'cities' => 'game_plays#cities' 
     match 'parties' => 'game_plays#parties' 
     match 'prefeito' => 'game_plays#prefeito' 
     match 'prefeitos' => 'game_plays#prefeitos' 
     match 'vereadores' => 'game_plays#vereadores' 
     match 'parties' => 'game_plays#parties' 
     match 'qualities' => 'game_plays#qualities' 
     match 'start' => 'game_plays#start' 
     match 'generated_image' => 'game_plays#generated_image' 
     match 'save_game_play' => 'game_plays#save_game_play' 
     match 'final' => 'game_plays#final', :as => :final 

     match 'inicio' => 'game_plays#index' 


     root :to => 'game_plays#bem_vindo' 

    end 

어떤 sugestions 여기

내 실제 설정인가?

답변

0

이 문제는 몇 달 전에 본인의 경험에서 비롯된 것이며 도움이되기를 바랍니다.

페이스 북의 관점에서 볼 때, 이것은 정확히 가정합니다. 요청의 출처와 다른 점을 인식하지 못합니다. 요청에 대한 리디렉션 URL을 iframe에 그대로 유지해야합니다.

내가 찾은 가장 쉬운 방법은 iframe URL을 my_website.com/fb-app으로 이동 시켜서 세션 변수가 캔버스에 있음을 알리고 이미 로그인되어 있는지 확인하도록하는 것입니다. 페이스 북. 그런 다음 캔버스 사이트로 리다이렉트하여 사이트가 정상적으로 계속되고 사용자가 아무 것도 알지 못하게합니다.

def fbapp 

    session[:fbapp] = true 

    if user_signed_in? == false 
    redirect_to user_omniauth_authorize_path(:facebook) 
    else 
    redirect_to $APP_CANVAS_URL + "?auth_token=" + current_user.authentication_token 
    end 
end 

그런 다음 Application_controller.rb에서 리디렉션 경로를 변경해야합니다. 이것은 내 응용 프로그램에서 어떻게 생겼는지입니다, 노트 $의 APP_CANVAS_URL 내가이 최선의 방법입니다 의심 https://apps.facebook.com/your_app_here

def after_sign_in_path_for(resource_or_scope) 
    if session[:fbapp] == true 
    $APP_CANVAS_URL + "?auth_token=" + current_user.authentication_token 
    else 
    root_path 
    end 
end 

의 라인을 따라 뭔가해야하지만, 내가 좌절의 시간 후에 나를 위해 일을 가지고거야. 나는 그것이 도움이되기를 바랍니다.

관련 문제