2012-03-09 67 views
32

我在我的網站中使用Devise我創建管理員命名空間並給予管理員創建用戶的功能。
我的路線是爲下導軌:3設計註冊過濾器鏈暫停爲:require_no_authentication呈現或重定向

devise_for :users,:has_many => :comments, :controllers => {:sessions =>'devise/sessions',:registrations => 'devise/registrations'} do  
    get "/login", :to => "devise/sessions#new", :as => :login 

    get "/signup", :to => "devise/registrations#new", :as => :signup  

    get "/logout", :to => "devise/sessions#destroy", :as => :logout 
end 

當我擁有signup_path引起以下錯誤ADD_USER點擊:

我的錯誤

Started GET "/signup" for 127.0.0.1 at Fri Mar 09 12:49:11 +0530 2012  
Processing by Devise::RegistrationsController#new as HTML  
User Load (0.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 35 LIMIT 1  
Redirected to http://localhost:3000/admin  
Filter chain halted as :require_no_authentication rendered or redirected 
Completed 302 Found in 3ms (ActiveRecord: 0.1ms) 

我覺得要去色器件註冊控制器,但由於下面的行它會導致設計註冊控制器中的錯誤

prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ] 
+6

您確定沒有登錄用戶嗎?嘗試註銷(或清理您的域的Cookie)並查看它是否有效。 – 2012-03-09 12:17:15

+0

是的,我以管理員身份登錄,管理員可以添加用戶,因此添加用戶頁面(註冊)可以打開並且不會重定向到localhost:3000/admin。 – 2012-03-10 07:37:23

+0

正如我所說我認爲問題是prepend_before_filter:require_no_authentication,:only => [:new,:create,:cancel]。我應該在我的助手中使用require_no_authentication方法嗎? – 2012-03-10 07:38:09

回答

30

Devise的控制器上提到的線條在一般情況下是有意義的:登錄用戶無法註冊。如果您只是一個管理員可以創建用戶的情況,我建議您不要在Registerable模塊上使用Devise的控制器,並使用您自己的規則編寫自己的控制器。您可以根據Devise的控制器編寫它,只更改上述行。

如果您想使用它,請嘗試跳過before_filterskip_before_filter。我不認爲這是最好的解決方案。我會寫我自己的控制器。

8

我在開發日誌中收到以下錯誤。

Filter chain halted as :require_no_authentication 

一個無限循環的形成是因爲色器件在application_controller.rb after_sign_in_path_for與在用戶

stored_location_for(resource) 

設計的寶石標誌當密碼被編輯重定向回到之前的頁面。

6

和你一樣,我希望管理員用戶能夠添加新用戶。但我不想惹惱Devise Registerable,因爲我確實希望用戶仍然可以註冊自己。我有一些具有添加新用戶權限的管理員用戶,因此我在用戶控制器和其他視圖中創建了其他方法來處理這種情況。

我的其他方法沒有被Devise的prepend_before_filter引用:require_no_authentication,所以他們沒有得到錯誤。

我的食譜:

在應用程序/控制器/ users_controller.rb(你正在使用的設計或任何對象):複製 新,創建和更新方法,並重新命名副本admin_new,admin_create和admin_update 。

在應用程序/視圖/用戶,複製new.html.erb到admin_new.html.erb改變部分指admin_form代替形式:

<%= render 'admin_form' %> 

然後複製部分_form.html.erb到_admin_form.html.erb。在_admin_form.html.erb,改變的form_for使用不同的URL:

form_for(@user, :url => '/users/admin_create') 

添加到config /航路。RB爲指向用戶控制器的可選方法:當你是打算登錄

devise_scope :user do 
    ... 
    get 'users/admin_new' => 'users#admin_new' 
    post 'users/admin_create' => 'users#admin_create' 
end 

現在你可以添加用戶/用戶/ admin_new,而用戶仍然可以創建自己的用戶(註冊)使用你沒有打擾的設計機制。

+0

你的解決方法解決了一個很大的問題,唐羅。謝謝! – 2016-03-31 09:01:29

5

嗨,大家好我有一個更簡單的解決方案:

prepend_before_filter :require_no_authentication, only: [:cancel ] 

通過從它覆蓋設計的源代碼和解決問題的prepend_before_filter去除:new, :create。我有同樣的問題,它解決了我的問題。

+0

一個班輪。 +1爲簡潔 – Jerome 2016-05-07 14:09:57

+0

@antoine在哪裏添加此代碼?你可以解釋一下更多 – 2017-05-25 20:54:59

+1

@pawankumar有一種方法來管理設計註冊使用一個'類RegistrationsController Jerome 2017-09-05 14:09:06