2015-12-17 35 views
1

我在Rails 4應用程序中使用Devise和Omniauth。在我看來,我有一個按鈕「用Facebook登錄」,指導用戶user_omniauth_authorize_path(:facebook)。這按預期工作並將用戶發送到/users/auth/facebook。然後,該URL似乎正確地將用戶重定向到Facebook登錄頁面。使用Rails,Devise和Omniauth訪問哪個控制器和操作

如何確定使用哪個控制器/操作進行重定向?我想在重定向到Facebook之前設置一個return_url。我能做到這一點,我經常SessionRegistration控制器通過繼承設計版本,並加入我的代碼,像這樣:

class Users::SessionsController < Devise::SessionsController 
    def new 
    return_url = params[:return_url] 
    store_location_for(:user, return_url) unless return_url.nil? 
    super 
    end 
end 

然後,我告訴想出用我的新的控制器:

devise_for :users, controllers: { sessions: 'users/sessions' } 

我想用omniauth功能來完成同樣的事情?當用戶訪問/users/auth/facebook時,有什麼方法可以找出哪個控制器被訪問?如果是這樣,我可以繼承它並按照上面的方法添加功能嗎?

UPDATE

我通過運行 '耙路線' 中發現的控制器/動作。下面是這樣說的:

user_omniauth_authorize GET|POST /users/auth/:provider(.:format)  users/omniauth_callbacks#passthru {:provider=>/facebook/} 

所以我能找到正在使用的passthru方法,但給我留下更糊塗了。這是一個在Devise::OmniauthCallbacksController說:

def passthru 
    render status: 404, text: "Not found. Authentication passthru." 
end 

我很困惑如何該方法導致用戶被重定向到Facebook。

+0

看看[鏈接](https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview)你需要添加一個callback_url :) –

+0

我不認爲這就是我要找的對於。 callback_url是當用戶從Facebook發回時處理請求的url。這在全球範圍內爲應用程序設置。我希望在用戶發送到Facebook之前設置redirect_url,然後確保callback_url最終將用戶重定向到已設置的URL。 – flyingL123

+0

好吧,這很讓人傷心,因爲我遇到了同樣的問題,而且你實際上從來沒有找到你的問題的「原因」(這不是通過你的控制器),只是想辦法解決。我仍在尋找。 – Laurent

回答

0

看起來您可以將參數傳遞給user_omniauth_authorize_path,然後使用request.env["omniauth.params"]在回調URL中檢索它們。於是,我改變了我的鏈接:在我OmniauthCallbacksController user_omniauth_authorize_path(:facebook, { return_url: '/test_redirect_path' }

然後我說:

store_location_for(:user, request.env["omniauth.params"]["return_url"]) 調用sign_in_and_redirect @user之前。

這似乎已經成功了。

相關問題