2011-01-24 22 views
10

Miré por todos lados y encontré mucha información ... pero nada funciona para mí y no lo entiendo :(Reemplazando el controlador de registro de Devise para permitir una redirección después de que se haya realizado un registro exitoso

sé que se supone que debe reemplazar el controlador de registro, así:

class Users::RegistrationsController < Devise::RegistrationsController 

def after_sign_up_path_for(resource) 
    authors_waiting_path 
end 

end 

a continuación, siguiendo el ejemplo mostrado por Tony Amoyal http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/, se supone que debo cambiar mis rutas para actualizar el acceso al nuevo controlador :

devise_for :users, :controllers => { :registrations => "users/registrations" } do 
#get '/author/sign_up', :to => 'devise/registrations#new' 
#get '/client/sign_up', :to => 'devise/registrations#new' 
get '/author/sign_up', :to => 'users/registrations#new' 
get '/client/sign_up', :to => 'users/registrations#new'  
end 

Sí, tengo algo un poco extraño aquí, porque estoy atrapando una ruta específica para enviarlos a la página de registro, esto me permite crear efectivamente 2 escenarios de registro. Comenté lo que tenía antes de anular el controlador de registro.

Aún con todo esto y mi authors_waiting_path ser una ruta válida, que sólo mantiene en ir a la página de registro después de Registrarse :(

Esto es muy frustrante.

Alex

edición : también se encuentra presente en el legado wiki: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(sign-up)

Pero no tengo ni idea de dónde definir este método de crear debería reemplazar el controlador de la sesión ???

?

editar 2:

Puedo poner una anulación de relleno de las controlador:

class Pouets::RegistrationsController < Devise::RegistrationsController 

    def after_sign_up_path_for(resource) 
     authors_waiting_path 
    end 

    def new 
     super 
    end 

    def create 
     puts "was here" 
     super 
    end 

    def edit 
     super 
    end 

    def update 
     super 
    end 

    def destroy 
     super 
    end 

    def cancel 
     super 
    end 

    end 

Y nunca la "era aquí" en los registros de mi .... Realmente tengo la sensación de que está ignorando totalmente la anulación ... debo estar haciendo algo mal :(

+0

¿Qué versión de rieles estás usando? ¿Qué versión de idear? –

+0

Rails 3.0.3 y diseñar 1.1.5, última versión de ambos si estoy correcto – Alex

Respuesta

9

Ok ... yo soy capaz de anularlo por lo que debe ser: 0

crear la carpeta app/controllers/usuarios

ponga allí registrations_controller.rb con: (opción con sesión, pero intentará firmar_en y luego redirigir, puede que no sea el comportamiento previsto para usted). Además, este es de legado wiki y no estoy seguro si funciona

class Users::RegistrationsController < Devise::RegistrationsController 

    def create 
    session["#{resource_name}_return_to"] = complete_path 
    super 
    end 

end 

reinicie la aplicación (sólo para asegurarse de que no confía en nada)


Con todo debe invalidar Crear Si queremos redirigir sólo los usuarios ... si quieres definir algunas escenario más complejo que debe monkeypatch sign_in_and_redirect

para que su voluntad se ve como controlador

class Users::RegistrationsController < Devise::RegistrationsController 
    # POST /resource/sign_up 
    def create 
    build_resource 

    if resource.save 
     set_flash_message :notice, :signed_up 

     #sign_in_and_redirect(resource_name, resource)\ 
     #this commented line is responsible for sign in and redirection 
     #change to something you want.. 
    else 
     clean_up_passwords(resource) 
     render_with_scope :new 
    end 
    end 
end 

segunda opción, intenta ayudar a monkeypatch ....

module Devise 
    module Controllers 
    # Those helpers are convenience methods added to ApplicationController. 
    module Helpers 
     def sign_in_and_redirect(resource_or_scope, resource=nil, skip=false) 
     #intended behaviour for signups 
     end 
    end 
    end 
end 
+0

Lo siento, pero creo que estás confundiendo lo que quiero hacer, quiero redirigir con el signo UP no iniciar sesión. Ya manejo el proceso de inicio de sesión, solo quiero dirigir a mis usuarios a una página de espera mientras activan su correo electrónico de confirmación. Y sí, tienes razón en que el método para anular el inicio de sesión de sign_in está en el controlador de la aplicación principal, pero no en el método de suscripción posterior lamentablemente :) Por cierto, creo que no debería tener esos métodos por todos lados – Alex

+0

Editar: Agregué el código –

+0

¿eh malo? ¿Estás seguro de que tu código está apuntando correctamente a este controlador? Tal vez agregue un aumento de "Prueba" para definir nuevo y verifique si se mostrará correctamente –

3

me han tratado la solución anterior y mientras funciona, la lectura de idear código, he descubierto que todo lo que realmente se necesita con el fin de firmar la salida de usuario acaba de registrar y redirigir es:

  1. a ¿Agregar is_approved o similar a su tabla de usuario y
  2. para agregar active_for_authentication? método en su modelo de usuario

Código:

class User < ActiveRecord::Base 

    # ... some code 

    def active_for_authentication? 
    super && is_approved 
    end 
end 

era un poco difícil de encontrar cuando lo necesitaba, pero eso es todo. De hecho, lo estoy escribiendo aquí en caso de que alguien más lo necesite.

+0

Muy útil, gracias por mencionar esto. [Docs] (http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Authenticatable) – Hana

Cuestiones relacionadas