2012-01-07 24 views
1

使用設計和自定義路由,只要用戶登錄嘗試失敗(錯誤傳遞),Rails就不會重定向回登錄頁面。如果我不使用自定義路線,那麼它工作正常。我在這裏做錯了什麼?設計不重定向到用自定義路由進行無效嘗試的登錄頁面

目標:我想用/登入,而不是/用戶/ sign_in

的routes.rb:

devise_for :users, :controllers => { :sessions => "user_sessions" },:skip => [:sessions] do 
    get 'signin' => 'user_sessions#new', :as => :new_user_session 
    post 'signin' => 'user_sessions#create', :as => :user_session 
    delete 'signout' => 'user_sessions#destroy', :as => :destroy_user_session 
    get 'signout' => 'user_sessions#destroy', :as => :destroy_user_session 
end 

內UserSessionsController /創建:

resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new") 

服務器輸出使用定製時路線/登錄:

Completed 401 Unauthorized in 2ms 

服務器輸出使用時默認路由/用戶/ sign_in:

Completed 401 Unauthorized in 2ms 
Processing by UserSessionsController#new as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2gqKTGWPv69HpVp7oSEg2tRDj5FU453my7LhKm0xu7E=", "user"=>{"email"=>"", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"SIGN IN"} 
Rendered user_sessions/new.html.erb within layouts/user_sessions (56.6ms) 
+0

你到底了嗎? – 2012-06-04 22:53:13

回答

1

更換:

<%= form_for(resource, :as => resource_name, :url => admin_session_path(resource_name)) do |f| %> 

有:

<%= form_for(resource, :as => resource_name, :url => admin_session_path) do |f| %> 

在/ new.html.erb文件爲我工作會議。

0

我知道這個問題已經發布了幾個月前,但我熱了同樣的問題,並爭取了數個小時,覆蓋設計SessionController後,設計自定義失敗,通過調試等等,我終於知道發生了什麼,我決定分享這個解決方案,這樣你們就不必經歷這個了。 在lign:resource = build_resource(...)的SessionController的create方法中發生錯誤'XXms中未完成的401已完成'。由於資源未傳遞給服務器,因此無法構建資源。現在問題在於爲什麼資源沒有傳遞給服務器?我正在使用JQUERY手機,它將sign_in作爲AJAX調用發佈,JQUERY無法通過AJAX上傳數據。 悠需要添加到您的登錄形式的數據AJAX =假: 在設計/會話/ new.html.erb修改的形式是這樣的:

form_for(resource, :as => resource_name, :url => user_session_url, html: {data: {ajax: false}}) do |f| 

希望幫助別人的道路。

相關問題