[Devise] przekierowanie po rejestracji

witam,
próbuje zmienić url do którego uzytkownik ma być przekierowany po rejestracji. Zrobiłem klasę dziedziczącą w controllers/users ale niestety nie łapie coś

class Users::RegistrationsController < Devise::RegistrationsController

def after_inactive_sign_up_path_for(resource)
tutaj_moja_scieżka
end

end

Co mi się rzuca w oczy jako pierwsze, to ten blok powinien wyglądać tak:

[code]class Users::RegistrationsController < Devise::RegistrationsController

protected

def after_inactive_sign_up_path_for(resource)
  tutaj_moja_scieżka
end

end[/code]
z tej racji, że jest to metoda chroniona, jak spojrzysz w kod devise: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb

Ponadto w routes.rb musisz mu wskazać, że ma korzystać z innego kontrolera, niż domyślnie:

devise_for :users, :controllers => { :registrations => 'users/registrations' }

Wydaje mi się, że to powinno rozwiązać Twój problem. Daj znać czy się udało.

dzięki ale niestety nie pomogło, czy jest jakiś sposób żeby prześledzić metoda po metodzie jak idzie tak akcja, coś jak info które pojawia się gdy jest jakiś bład ?

Tutaj masz link: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

możesz wkleić zawartość pliku ‘routes.rb’ ? lub co Ci wypisuje ‘rake routes’?

[quote]user_registration_pl POST /uzytkownik(.:format) {:controller=>“users/registrations”, :action=>“create”}
new_user_registration_pl GET /uzytkownik/zarejestruj(.:format) {:controller=>“users/registrations”, :action=>“new”}[/quote]
inne pytanie, czy można jakoś przechwycic moment gdy tworzony jest komunikat flash po zalogowaniu i wpisać coś innego w zależności od sytuacji ? Zaczynam powoli dochodzić do wniosku że Devise jest fajne, ale gdy używa się go raczej standardowo i za wiele nie kombinuje, gdy trzeba coś zrobić po swojemu to już gorzej

A nie zadziala tak ?

Tworzysz RegistrationsController, ktory dziedziczy po Devise::RegistrationsController, ustawiasz routes, a potem w nim redefiniujesz akcje create. Czyli wklejasz:

[code] def create
build_resource

if resource.save
  if resource.active?
    set_flash_message :notice, :signed_up
    sign_in_and_redirect(resource_name, resource)
  else
    set_flash_message :notice, :inactive_signed_up, :reason => resource.inactive_message.to_s
    expire_session_data_after_sign_in!
    redirect_to after_inactive_sign_up_path_for(resource)
  end
else
  clean_up_passwords(resource)
  render_with_scope :new
end

end[/code]
i zmieniasz co potrzebujesz

1 Like

chyba tak będzie trzeba zrobić, mała uwaga kod który podałeś jest z gita i wywala błąd jesli Devise jest zainstalowany bundlerem z rubygems, tam funkcja set_flash_message ma dwa argumenty, wiec trzeba ten kod skopiowac z katalogu bundlera albo instalowac Devise z gita, ale to chyba ryzykowne ? Tu jest kod

[quote]def create
build_resource

if resource.save
  set_flash_message :notice, :signed_up
  sign_in_and_redirect(resource_name, resource)
else
  clean_up_passwords(resource)
  render_with_scope :new
end

end[/quote]
To przy okazji wyjaśnia pierwotny problem, tam poprostu nie ma wywołania after_inactive_sign_up_path_for

To może masz starą wersję zainstalowaną przez Bundlera? Nie możesz zrobić

bundle update

? De facto Devise i tak instaluje się z githuba, więc nie wiem skąd panika.

To może przy kolejnej okazji opisz bardziej ogólnie co chcesz zrobić, zamiast wskazywać szczegółowo błędną funkcję…

wydawało mi sie że Devise instaluje sie z tego co mam podane w Gemfile np.

source 'http://rubygems.org'

Racja, instaluje z rubygems. Trochę wybiegłem naprzód :slight_smile:

Myślę, że da radę zainstalować z Git’a, jeśli w Gemfile’u wpiszesz taką linię:

gem 'devise', :git => 'git://github.com/plataformatec/devise.git'

najlepiej wrzucić do application_controller.rb:

def after_sign_in_path_for(resource)
	admin_path # tutaj definiujesz sobie gdzie chcesz uciec po poprawnym zalogowaniu
end

def after_sign_out_path_for(resource)
	admin_path # a tutaj definiujesz po wyglogowaniu
end
1 Like