我們曾在 Devise callbacks 中,描述如何在登入後自定 redirect。這次則是在 omniauth 進行 open id 驗證時就先把 redirect 當參數先丟。
參考 官方作法
利用 origin
參數即可在 open id 驗證後進行 redirect
config/routes.rb1
| match '/auth/facebook', :as => :facebook_login
|
app/views/xxx.erb1
2
3
| # view 或 controller 下
facebook_login_path(:origin => "/url/for/redirect")
# 即 "/auth/facebook?origin=/url/for/redirect"
|
若 devise
中已經透過 application_controller.rb 的 after_sign_in_path_for
處理登入後的 redirect 時,則可以透過 request.env['omniauth.origin']
取得 origin 參數的內容。
app/controllers/application_controller.rb1
2
3
| def after_sign_in_path_for(user)
return request.env['omniauth.origin'] || root_path
end
|