2011-03-28 23 views
15

Tengo un proyecto de Rails 3 con Devise, confirmable habilitado para que el usuario tenga que confirmar su cuenta a través del correo electrónico después del registro. Actualmente, el proyecto devuelve al usuario a la página de inicio de sesión y lanza un aviso de "Se ha registrado con éxito ...". Lo que quiero hacer en su lugar es redirigirlos a una página de "agradecimiento", con más instrucciones (revise su correo electrónico, carpeta de spam, bla, bla).Rails 3 and Devise: redireccionando a la página siguiente al registro (confirmable)

Mi primera parada fue en la wiki de Devise, donde yo found this page. Parecía bastante fácil, hice las siguientes alteraciones y seguido las instrucciones exactamente ...

/app/controllers/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 
    protected 
     def after_sign_up_path_for(resource) 
     "http://google.com" 
     end   
end 

/config/routes.rb

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

La única modificación que tuve que hacer sobre la dirección fue mover la carpeta "registros" de la carpeta/app/views/idee view a la carpeta superior/app/views, como una e rror devolvió que las vistas ahora faltaban. De todos modos, a pesar de que parece que la anulación del controlador parece funcionar (no creo que las vistas se hayan roto originalmente), esas instrucciones NO funcionan ... la página ignora el after_sign_up y regresa a la página de inicio de sesión después de iniciar sesión.

Fui a buscar en Internet, incluyendo otros hilos de Stack Overflow, pero nada de lo que encontré me funcionó ... las respuestas confunden la redirección de inicio de sesión para iniciar sesión, o lo que hacen es cambiar la redirección después de iniciar sesión (ya que Devise normalmente se registra automáticamente después del registro sin confirmación habilitada).

Otras cosas que he intentado ...

  1. Moviendo el after_sign_up_path_for (recurso) en el controlador de la aplicación. No funciona Por extraño que parezca, haciendo lo mismo con after_sign_in_path_for (resource) e iniciando sesión como un usuario DOES redirigir.

  2. Moviendo el registrations_controller.rb de/app/controllers/a la carpeta/app/controllers/users y actualizando todas las rutas/referencias/etc. en consecuencia. No vayas.

  3. Copiando los registros de registro de Devise_controller.rb en mi propio registrations_controller.rb. No funcionó, solo vomitó un error y lo devolví todo.

  4. Intenté def after_inactive_sign_up_path_for (resource), ya que pensé que quizás el hecho de que la cuenta aún no estaba activa era la culpable. Esto también es ignorado.

  5. También vale la pena mencionar que he intentado reiniciar mi proyecto después de estos cambios importantes, pero no se necesita nada.

¿Alguien ha tenido éxito al sacar esto adelante con la habilitación confirmable?

Respuesta

11

¿Qué versión de diseño estás usando? Estoy bastante seguro de que esto es issue was recently resolved, por lo que probablemente necesites la última versión del repositorio, que todavía es una versión candidata (aunque debería publicarse pronto, ya que estaban esperando a que Omniauth 0.2 salga de la versión beta, que recientemente sucedió).

Estoy usando Devise 1.2.rc2 del github repo con rieles 3.0.5. Agregué el código que mencionaste a mi RegistrationsController personalizado y se reenvió a google como se esperaba después de crear una nueva cuenta.

Una versión disección de mi RegistrationsController (en app/controllers/usuarios)

class Users::RegistrationsController < Devise::RegistrationsController 
    protected 
     def after_sign_up_path_for(resource) 
     "http://google.com" 
     end 

end 

Mi entrada routes.rb

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

Desde mi Gemfile

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

Avísame si tiene problemas con la última versión de idear.

+0

que estaba usando Diseñar 1.1.8, no había considerado la actualización de la gema. De todos modos, actualicé Devise a 1.2.1 (así como Rails 3.0.5 y todas las otras gemas), pero todavía se niega a redirigir, solo regresa a la página de inicio y muestra el mensaje "Se ha registrado con éxito. , no pudimos iniciar sesión porque su cuenta no está confirmada ". (Que es un mensaje nuevo para mí, pero supongo que agregaron en una de las actualizaciones de Devise.) Mi código es idéntico al suyo. Pero lo de arriba 'after_sign_up_path_for' es todo lo que tengo en RegistryController, ¿es suficiente o necesito más en mi controlador? – Shannon

+0

Además, también arrojé lo anterior en mi gemfile e intenté con Devise 1.3.0.dev, y también ignoré la redirección de mi controlador. – Shannon

+6

Espera, creo que lo tengo. Cambié after_sign_up_path_for con after_inactive_sign_up_path_for, y ahora está redirigiendo a Google. Así que la respuesta final fue esta, junto con la actualización de la gema como se sugirió anteriormente. Muchas gracias – Shannon

14

Simplemente estoy poniendo el comentario de @Shannon en una respuesta para que sea más fácil de encontrar.

Si necesita confirmación por correo electrónico después de registrarse, su usuario se quedará en un estado intermedio donde se haya registrado pero no haya hecho clic en el enlace que se le envió para confirmar su cuenta. Este es un registro inactivo. Para redirigir en esta situación es necesario especificar:

def after_inactive_sign_up_path_for(resource) 
    "http://example.com" 
end 
1

Otra forma sería la de hacer esto en controlador de aplicación

def after_sign_in_path_for(resource) 
    resource.sign_in_count <= 1 ? '/edit_profile' : root_path 
end 
+0

Es woks para mí thaks :) –

Cuestiones relacionadas