2012-03-09 13 views
32

Sitemde Devise kullanıyorum admin namepace yaratıyorum ve admin ile kullanıcı yaratmanın işlevselliğini sağlarım. raylar: 3 Devise kaydı Filtre zinciri şu şekilde engellendi: require_no_authentication İşe yaradı ya da yeniden yönlendirildi

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 

altında i aşağıdaki hataya neden signup_path sahiptir add_user linke tıkladığınızda olarak
benim yolları şunlardır:

My Hata

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) 

Ben vasiyet kayıt olacak düşünüyorum kontrolör fakat takip eden hat nedeniyle

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

Giriş yapmış bir kullanıcınız olmadığından emin misiniz? Oturum açmayı deneyin (veya alan adınızın çerezlerini temizleyin) ve çalışıp çalışmadığını görün. –

+0

evet, yönetici olarak giriş yaptım ve yönetici kullanıcı ekleyebilsin diye kullanıcı sayfası ekle (kayıt) açılabilir ve localhost'a yönlendirilemez: 3000/admin. –

+0

dediğim gibi sorun prepend_before_filter olduğunu düşünüyorum: require_no_authentication,: only => [: new,: create,: cancel]. yardımcımın require_no_authentication yöntemini kullanmalı mıyım? –

cevap

30

Devise Denetleyicisindeki söz konusu satır genel durumlarda anlamlıdır: Giriş yapmış bir kullanıcı kayıt olamaz. Sadece bir yöneticinin bir kullanıcı oluşturabileceği bir durumdayken, Devise'nin denetleyicisini Registerable modülünde kullanmamanızı ve kendi denetleyicinizi kendi kurallarınızla yazmanızı öneririm. Sadece belirtilen satırı değiştirerek Devise'nin kontrol cihazına göre yazabilirsiniz.

Kullanmak isterseniz, before_filter'u skip_before_filter ile atlamayı deneyin. En iyi çözüm olduğunu sanmıyorum. ve ben kendi denetleyicimi yazarım.

8

Geliştirme günlüğümde aşağıdaki hatayı alıyordum.

şifre düzenlendiğinde application_controller.rb hazırlamak en after_sign_in_path_for kullanıcı

stored_location_for(resource) 

hazırlamak en taş işaretleri ile önceki sayfaya yönlendirme çünkü

Filter chain halted as :require_no_authentication 

sonsuz döngü oluşturuldu.

6

Sizin gibi, yeni kullanıcı ekleyebilmek için bir Yönetici kullanıcısı istedim. Ama ben aslında Devise Registerable ile uğraşmak istemedim, çünkü aslında kullanıcıların kendilerini hala kayıt edebilmelerini istedim. Bazı kullanıcılara yeni bir kullanıcı ekleme izni verdim, bu yüzden kullanıcı denetleyicimde ek yöntemler ve bu durumu ele almak için ek görünümler oluşturdum.

Ek yöntemlerim, Devise'nin prepend_before_filter: require_no_authentication tarafından başvuruda bulunulmadı, bu nedenle, hata oluşmuyor.

Benim tarifi:

app/denetleyicileri/users_controller.rb olarak

(sizin için hazırlamak kullandığınız ya da her türlü nesne): Kopya yeni oluşturmak ve güncellemek yöntem ve admin_new kopya adlandırmak, admin_create ve admin_update .

<%= render 'admin_form' %> 

Sonra kısmi _form.html.erb kopyalayın:

app/views/kullanıcılar ise

yerine formun admin_form kısmi başvurmak için değiştirin admin_new.html.erb için new.html.erb kopyalamak _admin_form.html.erb.

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

config/rotalarda yolları ekleme: _admin_form.html.erb olarak, farklı bir URL kullanmak form_for değiştirin.rb kullanıcı denetleyicisi alternatif yöntemlere işaret etmek: Eğer giderek oturum sırasında

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

Artık kullanıcı ekleyebilirsiniz etmek/kullanıcılar/admin_new ve kullanıcılar hala kendi kullanıcı oluşturmak edebiliyoruz (kayıt) Rahatsız etmediğiniz düzenleme mekanizmasını kullanarak. kaynak kodunu bulmak ve sorunu çözmek geçersiz kılar prepend_before_filter den :new, :create kaldırarak

prepend_before_filter :require_no_authentication, only: [:cancel ] 

:

+0

Çözümünüz, benim için büyük bir sorun çözdü, Don Yasası. Teşekkürler! –

5

Merhaba çocuklar ben daha basit bir çözüm var. Aynı sorunu yaşadım ve problemimi çözdüm.

+0

bir astar. Bu kod eklemek için – Jerome

+0

@antoine olmak için +1? Biraz daha açıklayabiliyorsunuz –

+1

@pawankumar Bir "class RegistrationsController Jerome