2011-11-22 9 views
13

Necesito ayuda con un problema de rutas con la gema de autenticación idear para redirigir a una página personalizada después de un inicio de sesión exitoso para crear un nuevo registro ingresando el nombre de una persona de prueba y la edad (datos de prueba)Idear after_sign_in_path_for ... sending to .... ruta_ruta - consulta

estoy usando Rails 3 con la versión 1.4.9 legado

Mis rutas son las siguientes

new_user_session GET /users/sign_in(.:format)  {:action=>"new", :controller=>"devise/sessions"} 
     user_session POST /users/sign_in(.:format)  {:action=>"create", :controller=>"devise/sessions"} 
destroy_user_session DELETE /users/sign_out(.:format)  {:action=>"destroy", :controller=>"devise/sessions"} 
     user_password POST /users/password(.:format)  {:action=>"create", :controller=>"devise/passwords"} 
    new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"} 
    edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"} 
        PUT /users/password(.:format)  {:action=>"update", :controller=>"devise/passwords"} 
    cancel_user_registration GET /users/cancel(.:format)  {:action=>"cancel", :controller=>"devise/registrations"} 
    user_registration POST /users(.:format)    {:action=>"create", :controller=>"devise/registrations"} 
    new_user_registration GET /users/sign_up(.:format)  {:action=>"new", :controller=>"devise/registrations"} 
    edit_user_registration GET /users/edit(.:format)   {:action=>"edit", :controller=>"devise/registrations"} 
        PUT /users(.:format)    {:action=>"update", :controller=>"devise/registrations"} 
        DELETE /users(.:format)    {:action=>"destroy", :controller=>"devise/registrations"} 
      testers GET /testers(.:format)    {:action=>"index", :controller=>"testers"} 
        POST /testers(.:format)    {:action=>"create", :controller=>"testers"} 
      new_tester GET /testers/new(.:format)   {:action=>"new", :controller=>"testers"} 
     edit_tester GET /testers/:id/edit(.:format) {:action=>"edit", :controller=>"testers"} 
       tester GET /testers/:id(.:format)   {:action=>"show", :controller=>"testers"} 
        PUT /testers/:id(.:format)   {:action=>"update", :controller=>"testers"} 
        DELETE /testers/:id(.:format)   {:action=>"destroy", :controller=>"testers"} 
       root  /       {:controller=>"testers", :action=>"index"} 

En controlador de aplicaciones i trató de anular el método como el de abajo, pero a en vano, sigo siendo enviado de vuelta al índice de prueba

class ApplicationController < ActionController::Base 

    protect_from_forgery 

    def after_sign_in_path_for(resource) 

     new_tester_path 

    end 

end 

En mi archivo routes.rb tengo las siguientes líneas

Testing::Application.routes.draw do 

    devise_for :users 

    resources :testers 

    root :to => 'testers#index' 

Si bien gran parte del código se hizo con andamios todavía no estaba ser capaz de averiguar cómo redirigir a new_tester_path o ruta /testers/nuevo después de exitoso sign_in por correo electrónico y contraseña del usuario.

¿Puede alguien decirme qué me falta ... mientras escribo la función de anulación, me gustaría saber la ruta exacta que necesito especificar.

Mientras que la prueba he intentado algo estúpido como este, pero la página de Google también no se está abriendo ... :(

class ApplicationController < ActionController::Base 

protect_from_forgery 

helper ApplicationHelper 

def after_sign_in_path_for(resource) 

"www.google.com" 

end 

def after_sign_up_path_for(resource) 

"www.google.com" 

end 

def after_update_path_for(resource) 

"www.google.com" 

end 
+0

Mientras que la prueba he intentado algo estúpido como este, pero la página de Google también no se está abriendo ... :(clase ApplicationController

Respuesta

5

intente configurar ruta user_return_to en sesión:

session['user_return_to'] = new_tester_path 

Puede hacerlo en un controlador derivado de Devise :: SessionsController

+0

he intentado esto y las rutas que funcionó para mí def stored_location_for (recurso) nula finales –

0

Parece que no estás haciendo nada mal. Tal vez esto sea un problema de Devise.

¿Puedes intentar aislar esto en la aplicación Rails y abrir un problema en Devise?

+0

i trató de anular la función de continuación antes de ater_sign_in_path def stored_location_for (recurso) nula final ---- y que sólo trabajaba - encontró esta función en uno de los hilos relacionados con el problema de diseño en stackoverflow –

1

Creo que esto es un problema de herencia. after_sign_in_path_for se definió originalmente en Devise :: SessionsController. Puede anularlo haciendo que su SessionsController herede de Devise :: SessionsController, y luego redefinirlo dentro de ese controlador.

19

sólo tiene que utilizar este fragmento:

class ApplicationController < ActionController::Base 
    def after_sign_in_path_for(user) 
     user_url(user) 
    end 
end 
1

Si usted está teniendo problemas tratando de anular los after_sign_in_path_for o after_sign_out_path_for métodos de ayuda dentro de la ApplicationController de un motor de rieles, es posible que desee echa un vistazo a este answer.

Describe cómo deberá sobrescribir el SessionsController en su motor en lugar de ApplicationController.

0

La documentación de Devise explica todos los pasos a redirect to a specific page on successful sign in. Al combinar las técnicas, puedes redirigir a un usuario a muchos lugares después de iniciar sesión correctamente.

Aquí está la hoja de vida:

Usted puede hacer esto en un controlador se hereda de Diseñar :: SessionsController - en primer lugar, en los controladores/usuarios/sessions_controller.rb:

module Users 
    class SessionsController < Devise::SessionsController 
    def new 
    if params[:redirect_to].present? 
     self.resource = resource_class.new(sign_in_params) 
     store_location_for(resource, params[:redirect_to]) 
    end 
    super 
    end 
    end 
end 

En config/rutas .rb, que también habría añadido:

devise_for :users, controllers: {sessions: 'users/sessions'} 

Y debe agregar una costumbre after_sign_in_path_for en su ApplicationController

class ApplicationController < ActionController::Base 
    protected 
    def after_sign_in_path_for(resource) 
    stored_location_for(resource) || root_path 
    end 
end 

Esto funciona en todas las versiones de Devise, como yo sé.

+0

¿Está seguro de que es 'new' y no' create'? ¿Cómo tendría 'sign_in_params' disponible cuando' GET' la ruta '# new'? – Chloe