2012-10-18 1 views
5

Devise leitet nicht auf die von after_sign_in_path_for zur Verfügung gestellte URL um. Es ruft tatsächlich meine benutzerdefinierte after_sign_in_path_for stattdessen. Es berechnet die URL, von der ich erwarte, dass sie berechnet, aber dann findet keine Umleitung statt. Es bleibt auf der sign_in Seite, aber die eigentliche Anmeldung findet nicht statt.Devise after_sign_in_path_for funktioniert, aber Umleitung erfolgt nicht

Ich habe mehrere Versionen von devise versucht:

gem 'devise' 

und

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

gleiches Ergebnis.

Meine benutzerdefinierte 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 

genannt wird, gibt es die richtige URL, gibt str genau so, wie ich es erwartet zu geben. Debugger stoppt an dieser Stelle ...

Aber nach cont bleibt die Seite bei sign_in, während jedoch die Anmeldung erfolgt.

Ich glaube, es ist nicht mein Code-Problem. Es könnte ein Devise-Problem sein. Kann jemand, der es funktioniert, teilen Sie mir die genaue Version von Devise, die mit Ihnen arbeitet.

+1

Können Sie bestätigen, dass die Anmeldeinformationen gültig sind? 'respond_with' überprüft das Ressourcenelement auf Fehler, bevor es zum angegebenen Speicherort weitergeht, und zwar nach dem Auflösen des benutzerdefinierten Pfads – PinnyM

Antwort

2

Schwer zu sagen, ohne Ihre Serverprotokolle zu sehen. Wenn after_sign_in_path_for wird die erwartete URL aufgerufen und zum Erzeugen, dann läßt, dass eine Möglichkeit:

# 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. Da es die Vorlage new erneut rendert, weist es auf eine Art Validierungsfehler oder ein anderes Problem bei der Anmeldung hin.

Werfen Sie einen Blick auf die Serverprotokolle. Hier ist ein erfolgreiches Zeichen in und anschließende Umleitung mit den after_sign_in_path_for von meiner App:

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) 

Sind Sie sehen, dass umleiten?

+0

Ja. Du liegst ziemlich richtig. Es gab eine merkwürdige Validierungssache. Der Benutzer konnte aufgrund der Verwicklung von StateMachine nicht ordnungsgemäß validiert werden. Ich habe versucht, auf einen Benutzer ein Ereignis zu feuern, das aus dem Zustand, in dem er war, nicht verfügbar ist. Was auch immer. Es war ein tiefes Validierungsproblem. Nach dem Reparieren der StateMachine-Ereignisse funktioniert alles. Danke! – Dahan

+0

Sicher Sache. Vergessen Sie nicht, die Schleife zu schließen. – jordanpg

+0

Yup, für mich war es ein Benutzermodell Validierungsfehler, der, obwohl erlaubt, sich einzuloggen, ließ den Benutzer nicht aktualisieren, daher die Umleitung zu sign_in ... – cavpollo