2012-10-18 12 views
5

Dewise nie przekierowuje do adresu URL podanego przez after_sign_in_path_for. To w rzeczywistości nazywa mój zwyczaj after_sign_in_path_for. Oblicza adres URL, którego oczekuję, ale obliczenie nie nastąpi. Pozostaje na stronie sign_in, ale faktyczne zalogowanie się nie ma miejsca.Wymyślić after_sign_in_path_for działa, ale przekierowanie się nie stanie

Próbowałem kilka wersji devise:

gem 'devise' 

i

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

sam rezultat.

Mam zwyczaj after_sign_in_path_for

def after_sign_in_path_for(resource) 
    str = stored_location_for(resource) || stored_location || root_path 
    debugger 
    str 
end 

def stored_location 
    session.delete(:return_to) 
end 

def store_location 
    session[:return_to] = request.fullpath 
end 

jest nazywany, to daje prawidłowego adresu URL daje str dokładnie tak, jak można oczekiwać, że dają. Debuger zatrzymuje się w tym momencie ...

Po stronie cont strona pozostaje jednak pod numerem sign_in, mimo że nastąpi rejestracja.

Uważam, że to nie jest mój kodeks. To może być problem z Devise. Czy ktokolwiek, kto to ma pracuje, podziel się ze mną dokładną wersją Devise, która działa z tobą.

+1

Czy możesz potwierdzić, że dane logowania są prawidłowe? 'response_with' sprawdzi element zasobu pod kątem błędów przed przejściem do podanej lokalizacji i zrobi to po rozwiązaniu niestandardowej ścieżki – PinnyM

Odpowiedz

2

Trudno powiedzieć bez oglądania logów serwera. Jeśli after_sign_in_path_for jest nazywany i generowania oczekiwany URL, to pozostawia jedną możliwość:

# app/controllers/devise/sessions_controller.rb 
# POST /resource/sign_in 
def create 
    resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
end 

The respond_with method will act sensibly according to the status of the resource. Ponieważ ponownie renderuje szablon new, wskazuje na jakiś błąd sprawdzania poprawności lub inne problemy z logowaniem.

Zobacz dzienniki serwera. Tutaj jest sukcesem wejść, a następnie przekierowanie przy użyciu after_sign_in_path_for z mojej aplikacji:

Started POST "/admins/sign_in" for 127.0.0.1 at 2012-10-18 09:59:27 -0700 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Processing by Devise::SessionsController#create as HTML 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Parameters: {"utf8"=>"✓", "authenticity_token"=>"DGjs2b3k8BIi62KWCn3u5kx7YxxyR03xkERcgH/ilr0=", "admin"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"} 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] Admin Load (2.1ms) SELECT "admins".* FROM "admins" WHERE "admins"."email" = '[email protected]' LIMIT 1 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] (1.0ms) BEGIN 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] (0.9ms) UPDATE "admins" SET "last_sign_in_at" = '2012-10-18 16:53:19.428068', "current_sign_in_at" = '2012-10-18 16:59:28.076180', "last_sign_in_ip" = '127.0.0.1', "sign_in_count" = 3, "updated_at" = '2012-10-18 16:59:28.078677' WHERE "admins"."id" = 1 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] (9.3ms) COMMIT 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Redirected to http://localhost:3001/admin/users 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Completed 302 Found in 97ms (ActiveRecord: 0.0ms) 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] 

Started GET "/admin/users" for 127.0.0.1 at 2012-10-18 09:59:28 -0700 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] Processing by UsersController#index as HTML 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:28 -0700] Admin Load (1.2ms) SELECT "admins".* FROM "admins" WHERE "admins"."id" = 1 LIMIT 1 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:28 -0700] User Load (1.0ms) SELECT "users".* FROM "users" 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] Rendered users/index.html.erb within layouts/application (1.0ms) 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] Completed 200 OK in 22ms (Views: 16.5ms | ActiveRecord: 2.2ms) 

Czy widzisz, że przekierowanie?

+0

Tak. Masz rację. Było dziwne potwierdzenie. Użytkownik nie mógł poprawnie sprawdzić poprawności z powodu uwikłania w StateMachine. Próbowałem wystrzelić na użytkownika zdarzenie, które nie jest dostępne w stanie, w którym się znajdował. Cokolwiek. To był głęboki problem z weryfikacją. Po naprawieniu zdarzeń statemachine wszystko działa. Dzięki! – Dahan

+0

Pewnie. Nie zapomnij zaakceptować zamknięcia pętli. – jordanpg

+0

Tak, dla mnie był to błąd sprawdzania poprawności modelu użytkownika, który chociaż pozwolił się zalogować, nie zezwolił na aktualizację użytkownika, stąd przekierowanie do sign_in ... – cavpollo

Powiązane problemy