所有我已經找到了成功登錄與助手 after_sign_in_path_for(resource)
設計重定向後登錄失敗
我在網站的索引登錄表單相關的問題,當登錄失敗重定向到「users/sign_in」
但是,當登錄失敗時,如何重定向到我的「網站#索引」?
所有我已經找到了成功登錄與助手 after_sign_in_path_for(resource)
設計重定向後登錄失敗
我在網站的索引登錄表單相關的問題,當登錄失敗重定向到「users/sign_in」
但是,當登錄失敗時,如何重定向到我的「網站#索引」?
您可以更改默認的sign_in路徑。
退房https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
謝謝@MikeH,我試過了。 ** devise_for:用戶做 得到 '用戶',:到=> '網站#指數',:爲=>:user_root#導軌3 結束** 運行完美重定向到我的索引所有的情況下,除了當登錄失敗時。在這種情況下,它將重定向到user/sign_in,並且我希望被重定向到「site#index」。 – Juanjo 2011-04-29 22:17:44
嗯。當登錄失敗時,devise的失敗應用程序將重定向到** new _#{scope} _session_path **(您的情況爲new_user_session_path)。當您執行** rake routes **時,此資源路徑會顯示何種控制器/操作? – MikeH 2011-04-30 00:43:14
你找到答案了嗎?我仍在尋找它... – ronnieonrails 2011-07-19 15:12:19
在你的lib目錄下創建一個custom_failure.rb,具有:
class CustomFailure < Devise::FailureApp
def redirect_url
your_path
end
def respond
if http_auth?
http_auth
else
redirect
end
end
end
在你設計的初始化,包括:
config.warden do |manager|
manager.failure_app = CustomFailure
end
製作確定Rails將加載到您的lib文件中,位於application.rb中:
config.autoload_paths += %W(#{config.root}/lib)
不要忘記重新啓動服務器。
我不認爲有一個更簡單的方法來做到這一點。祝你好運。
這沒有奏效。我知道這是來自設計wiki的股票答案。 – dsaronin 2011-11-25 08:53:39
真棒!它適用於我:) – abhijeetmisra 2012-01-10 15:54:30
適合我,太棒了! – 2012-01-25 16:02:31
如果您使用自己的SessionsController
,你可以在運行warden.authenticate!(auth_options)
之前重新分配的auth_options
的:recall
價值回憶你想要的controller#method
,例如:
class Users::SessionsController < Devise::SessionsController
#...
def create
#...
auth_options = { :recall => 'site#index', :scope => :user }
resource = warden.authenticate!(auth_options)
#...
end
#...
end
通過這種方式,您不需要創建定製的FailureApp並修改配置。
這將修改網址爲用戶/ sign_in – Edward 2016-11-04 06:50:57
這是更好的方法。 – 2018-01-19 16:20:29
這是色器件3.1.0
Started POST "https://stackoverflow.com/users/sign_in"
Processing by Devise::SessionsController#create
Completed 401 Unauthorized
Processing by Devise::SessionsController#new
新發生的事情會被調用,因爲在寶石年底確定的auth_options的/設計-3.1.0 /應用/控制器/設計/ sessions_controller.rb
您應該重新定義創建操作中使用的auth_options。我複製在app /控制器/設計/我的Rails應用程序的sessions_controller.rb控制器和更換auth_options方法這樣
def auth_options
{ :scope => resource_name, :recall => "Home#new" }
end
它的伎倆,但URL仍/用戶/ sign_in
我會盡力解決這個問題。
我現在在設計3.2.2上。 Marcao的解決方案非常完美。無需複製和修補設計控制器或設置auth_options。 – pmontrasio 2014-02-14 17:12:15
詳細闡述Marcao的答案,我強烈建議在您的CustomFailure響應方法中放置一些debugger以便更好地理解正在發生的事情。
Class CustomFailure < Devise::FailureApp
def respond
binding.pry
super
end
end
如果你看一下FailureApp Devise Source Code的respond方法是非常容易理解到底是怎麼回事。
def respond
if http_auth?
http_auth
elsif warden_options[:recall]
recall
else
redirect
end
end
因此,例如,爲了回報你想確保你的respond
代碼條件表達式最終返回redirect
一個REDIRECT_URL。
但是,如果您想要返回http_auth方法中定義的標準401狀態,您需要驗證您的respond
方法代碼返回http_auth
。
因此,它是值得你考慮的http_auth?
特別的定義,請注意:request.xhr?
方法,這會爲JSON請求返回0(記住,0實際上計算結果爲真紅寶石)
def http_auth?
if request.xhr?
Devise.http_authenticatable_on_xhr
else
!(request_format && is_navigational_format?)
end
end
也許檢查您的初始化程序/設計文件爲config.http_authenticatable_on_xhr
或config.navigational_formats
爲了控制您想要的響應。這種配置可以真正影響Devise返回的內容,並且通常會導致意外的行爲,這是由於它在這裏所做的。
這個工作適合你嗎?如果是這樣,請標記。 – 2012-03-04 20:17:49