我在Rails 4應用程序中使用Devise和Omniauth。在我看來,我有一個按鈕「用Facebook登錄」,指導用戶user_omniauth_authorize_path(:facebook)
。這按預期工作並將用戶發送到/users/auth/facebook
。然後,該URL似乎正確地將用戶重定向到Facebook登錄頁面。使用Rails,Devise和Omniauth訪問哪個控制器和操作
如何確定使用哪個控制器/操作進行重定向?我想在重定向到Facebook之前設置一個return_url
。我能做到這一點,我經常Session
和Registration
控制器通過繼承設計版本,並加入我的代碼,像這樣:
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。
看看[鏈接](https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview)你需要添加一個callback_url :) –
我不認爲這就是我要找的對於。 callback_url是當用戶從Facebook發回時處理請求的url。這在全球範圍內爲應用程序設置。我希望在用戶發送到Facebook之前設置redirect_url,然後確保callback_url最終將用戶重定向到已設置的URL。 – flyingL123
好吧,這很讓人傷心,因爲我遇到了同樣的問題,而且你實際上從來沒有找到你的問題的「原因」(這不是通過你的控制器),只是想辦法解決。我仍在尋找。 – Laurent