2013-05-07 7 views
5

Co się stanie, gdy użytkownik kliknie link potwierdzający - i jego konto zostanie pomyślnie potwierdzone - powinny zostać przekierowane do określonej ścieżki, jeśli mają one określoną rolę przypisany (który jest z powodzeniem przypisywany w wywołaniu zwrotnym after_create w modelu User).Zastępowanie ścieżki przekierowania po potwierdzeniu konta przez użytkownika - Wymyślenie

Stworzyłem RegistrationsController:

class RegistrationsController < Devise::RegistrationsController 
    protected 

    def after_sign_up_path_for(resource) 
    if resource.has_role? :seller 
     new_item_path 
    else 
     root_path 
    end 
    end 
end 

Ale to zawsze przekierowuje do root_path .... mimo, mam dowód, że użytkownik rzeczywiście ma tę rolę.

Edycja 1

Wydaje się, że prośba o potwierdzenie nie zostanie wysłany do RegistrationsController:

Started GET "https://stackoverflow.com/users/confirmation?confirmation_token=KRwZ7MChtxxq4sxxkDLq" for 127.0.0.1 at 2013-05-07 03:52:56 -0500 
Processing by Devise::ConfirmationsController#show as HTML 
    Parameters: {"confirmation_token"=>"KRwZ7MChtxxq4sxxkDLq"} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'KRwZ7MChtxxq4sxxkDLq' LIMIT 1 
    (0.1ms) BEGIN 
    (0.5ms) UPDATE "users" SET "confirmation_token" = NULL, "confirmed_at" = '2013-05-07 08:52:56.846852', "updated_at" = '2013-05-07 08:52:56.847730' WHERE "users"."id" = 9 
    (0.8ms) COMMIT 
    (0.1ms) BEGIN 
    (0.4ms) UPDATE "users" SET "last_sign_in_at" = '2013-05-07 08:52:56.852250', "current_sign_in_at" = '2013-05-07 08:52:56.852250', "last_sign_in_ip" = '127.0.0.1', "current_sign_in_ip" = '127.0.0.1', "sign_in_count" = 1, "updated_at" = '2013-05-07 08:52:56.853180' WHERE "users"."id" = 9 
    (0.7ms) COMMIT 
Redirected to http://localhost:3000/ 
Completed 302 Found in 31ms (ActiveRecord: 3.2 

Edycja 2

To właśnie mój routes.rb wygląda

devise_for :users, :path_names => { :sign_up => "register", 
             :sign_in => "login", 
             :sign_out => "logout", 
             :settings => "settings" }, 
         :controllers => { :registrations => "registrations" } 

    devise_scope :user do 
    get "login", :to => "devise/sessions#new" 
    get "register", :to => "registrations#new" 
     get "settings", :to => "devise/registrations#edit" 
    get "logout", :to => "devise/sessions#destroy"  
    end 
+0

Czy zasób jest równy Użytkownikowi – ahmet

+0

Wierzę, że tak. Właśnie tego używa program. – marcamillion

Odpowiedz

16

ja wydarzenie ually to wymyśliło.

Musiałem utworzyć klasę ConfirmationsController.rb, która zastępuje kontroler Confirmation Devise'a.

class ConfirmationsController < Devise::ConfirmationsController 
    protected 
    def after_confirmation_path_for(resource_name, resource) 
     if resource.has_role? :seller 
     new_item_path 
     else 
     root_path 
     end 
    end 
end 

Wtedy w moim routes.rb:

devise_for :users, :path_names => { :sign_up => "register", 
             :sign_in => "login", 
             :sign_out => "logout", 
         :settings => "settings" }, 
         :controllers => {:confirmations => "confirmations"} 

    devise_scope :user do 
    get "login", :to => "devise/sessions#new" 
    get "register", :to => "devise/registrations#new" 
    get "settings", :to => "devise/registrations#edit" 
    get "logout", :to => "devise/sessions#destroy"  
    end 

To wydaje się działać dobrze dla mnie.

+0

dziękuję koleś to bardzo pomocne –

0

Czy napisałeś metodę roli w swoim modelu user.rb. Jeśli nie należy pisać metoda rola

LUB

Możesz napisać rolify w user.rb w klasie User w górnym

+0

Tak. Sprawdziłem, że użytkownik ma tę rolę. – marcamillion

0

Czy napisany następujący powiedzieć opracować użyć zastąpiona kontroler zamiast domyślnego

W config/routes.rb

devise_for :users, :controllers => {:registrations => "registrations"}

+0

Tak. Zaktualizowałem pytanie za pomocą my routes.rb. – marcamillion

+0

w sterowniku rejestracyjnym napisz load_and_authorize_resource – Murhari

+0

Możesz odwołać się do http://stackoverflow.com/questions/7624385/custom-registrations-controller-for-devise-not-overriding-create-action – Murhari