2011-12-16 34 views
6

Estoy tratando de permitir al usuario restablecer sus contraseñas usando opción recuperable de inventar. Esto no parece estar funcionando para mí.- Recuperable (Restablecer contraseña)

Extiendo el Devise::PasswordsController para que no utilice el diseño de la aplicación.

class PasswordsController < Devise::PasswordsController 
    layout false 
end 

En mis rutas, me aseguro de que se use mi controlador de contraseñas.

devise_for :users, :controllers => {:passwords => "passwords"} 
resources :passwords 

Aquí es mi modelo de usuario para que vea que tengo la opción :recoverable.

devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

En la página de inicio de sesión, He (estoy usando haml):

... 
= link_to "Forgot your password?", new_password_path(resource_name) 

Este enlace me lleva correctamente a http://localhost:3000/users/password/new Aquí está el formulario que se encuentra allí:

%h2 Forgot your password? 
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { :method => :post }) do |f| 
    = devise_error_messages! 
    %div 
    = f.label :email 
    %br/ 
    = f.email_field :email 
    %div= f.submit "Send me reset password instructions" 

Sin embargo, esto parece intentar llevarme al lugar equivocado cuando hago clic en el botón. Está fallando todo el tiempo y no muestra ningún correo electrónico en el registro del servidor.

Me está redirigiendo a: http://localhost:3000/passwords/user y diciéndome:

enrutamiento de error

No route matches "/passwords/user" 

Cualquier idea de cómo puedo proceder? Pensé que el uso de la opción recuperable era más fácil que esto. ¿Qué estoy haciendo mal?

ACTUALIZACIÓN Para el registro, me acaba de quitar todo lo que hacía, y trató de usar los controladores estándar Idear, y he modificado mi diseño de la aplicación para que no causaría un error, y todo está trabajando. Así que solo necesito una buena manera de eliminar el diseño de la aplicación de la página de restablecimiento de contraseña.

Respuesta

2

Parece ser que cuando se llama a password_path(resource_name) en su código de la vista, el sistema de enrutamiento piensa que quiere decir /passwords/resource_name, en lugar del controlador de espacio de nombres bajo users por inventar. Esto es porque usted tiene la línea

resources :passwords 

directamente bajo su devise_for llamada en su archivo de rutas. Ahora no estoy seguro de si esa línea está ahí por algún motivo, pero ¿su problema desaparece cuando lo comenta?

+0

El problema persiste. No me permitirá acceder a la página de restablecimiento de contraseña sin él. Se quejará de que no hay una ruta para los usuarios/contraseña/nueva. Originalmente pensé que también, encontré esa información aquí: https: // github.com/plataformatec/devise/wiki/How-To: -llow-users-to-edit-their-password – ardavis

+0

Creo que el problema principal es el hecho de que estoy tratando de extender Devise :: PasswordsController. Desearía no tener que hacer esto, lo único que quiero es que la página de restablecer contraseña no use el diseño de mi aplicación. – ardavis

+0

Para el registro, simplemente eliminé todo lo que hice, y traté de usar los controladores de diseño estándar, y modifiqué el diseño de mi aplicación para que no causara un error, y todo está funcionando. Así que solo necesito una buena manera de eliminar el diseño de la aplicación de la página de restablecimiento de contraseña. – ardavis

0

Para el beneficio de quien encuentre este hilo antiguo y quiera que algunas páginas tengan un diseño diferente, utilizo este método en mi aplicación/views/layouts/application.html.erb para quitar el diseño predeterminado.

<% if (current_page?(what_ever_path)) %> 
    <div class="container"> 
     <%= yield %> 
    </div>  

<% else %> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <%= yield %> 
    </div> 
    <%= render 'layouts/footer' %> 
<% end %> 
+0

Sé que este es/era un comentario antiguo, pero puede anular muy fácilmente el diseño del dispositivo creando el propio archivo de diseño 'app/views/layouts/devise.html.erb'. – Dan

+0

Gracias por ese comentario y actualización a esta información. No sabía ese poco de magia de rieles en el momento de mi publicación. – JosephK

Cuestiones relacionadas