Estoy tratando de integrar Devise en mi aplicación. Necesito implementar el formulario de inicio de sesión en la parte superior de la página (he implementado este formulario en la página de diseño) y he implementado el registro que contiene el formulario de registro. Pero muestra errores de validación para ambos formularios cuando intenté enviar datos de registro incorrectos.Devise. Registro e inicio de sesión en la misma página
Respuesta
Sin más información, es difícil de adivinar cuál es el problema. He encontrado las páginas wiki a ser realmente útil (y cada vez más), aunque es posible que ya los examinó:
dos páginas que podrían ser relevantes para sus necesidades:
Espero que esto ayude!
- ff
Encontré un problema que no dependía del Devise. Cambio el nombre del objeto para cada formulario y funciona correctamente. –
@VitalyAksionchyk ¿puedes describir lo que hiciste con más detalle? – flynfish
Para mí, el cambio de 'simple_form_for (" User ", ...' to 'simple_form_for (" user ", ...' ayudó) – mirelon
Usted debe tener dos formularios de la página - una para la firma y uno para el registro. Si quieres un formulario único y múltiples acciones potenciales que van a necesitar un par de botones que manejan conseguir lado del cliente y cambiar el método de acción & de la forma a la vía apropiada dependiendo desea crear un usuario o una sesión.
Si cree que ya ha hecho esto, el problema es casi seguro que se encuentra en el código. Si quisieras compartirlo con nosotros, podríamos señalar algo que quizás te hayas perdido.
El problema de ver los errores de validación para ambas formas se deriva de las 2 cosas. Primero, las formas de diseño usan un ayudante genérico de "recursos". Esto crea un objeto Usuario, y ese mismo objeto de usuario se usa tanto para el registro como para el formulario de inicio de sesión. En segundo lugar, los errores de diseño se muestran normalmente con el 'devise_error_messages!' ayudante que usa ese mismo recurso compartido.
Para iniciar sesión y suscribirse en la misma página, debe crear diferentes objetos de usuario para cada formulario y una nueva forma de mostrar los mensajes de error.
En primer lugar, usted necesita para crear su propio controlador de registro (en app/controllers/usuarios /)
class Users::RegistrationsController < Devise::RegistrationsController
include DevisePermittedParameters
protected
def build_resource(hash=nil)
super
# Create an instance var to use just for the sign up form
@sign_up_user = self.resource
end
end
y actualizar su archivo de rutas en consecuencia
devise_for :users, controllers: {
registrations: 'users/registrations'
}
Seguidamente se le necesita sus propios mensajes de error y recursos auxiliares. Crear un nuevo ayudante como devise_single_page_helper.rb y añadir lo siguiente:
module DeviseSinglePageHelper
def devise_error_messages_for_same_page(given_resource)
return "" if given_resource.errors.empty?
messages = given_resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
sentence = I18n.t("errors.messages.not_saved",
count: given_resource.errors.count,
resource: given_resource.class.model_name.human.downcase)
html = <<-HTML
<div id="error_explanation">
<h2>#{sentence}</h2>
<ul>#{messages}</ul>
</div>
HTML
html.html_safe
end
def sign_up_user
@sign_up_user ||= User.new(username: 'su')
end
def sign_in_user
@sign_in_user ||= User.new(username: 'si')
end
end
Por último, en su opinión, actualizar sus formas, así:
-# The sign up form
= simple_form_for(sign_up_user, url: registration_path(resource_name)) do |f|
-#...
= devise_error_messages_for_same_page(sign_up_user)
-# The sign in form
= simple_form_for(sign_in_user, url: sessions_path(resource_name)) do |f|
#...
= devise_error_messages_for_same_page(sign_in_user)
Todo esto junto le da 2 objetos diferentes - 1 para registrarse y 1 para iniciar sesión. Esto evitará que los mensajes de error de una se muestren en la otra.Tenga en cuenta que recomendamos colocar los dos formularios en su página de inicio de sesión (y tal vez redirigir la página de inicio de sesión predeterminada a la página de inicio de sesión) porque, de forma predeterminada, un intento fallido de inicio de sesión redirigirá a la página de inicio de sesión.
- 1. Diseñar formulario de registro en la página de inicio también
- 2. Redirigir la página de inicio de sesión/registro de Wordpress a una página de inicio de sesión/registro personalizada
- 3. Rails & Devise: ¿Cómo renderizar la página de inicio de sesión sin un diseño?
- 4. VS2010: salida de inicio de sesión de creación mínima e inicio de sesión detallado archivo de registro
- 5. página de inicio de sesión en phpmyadmin
- 6. Cómo redirigir a la misma página después de iniciar sesión
- 7. Página de inicio de sesión de administrador de Django redirecciona a la misma página en las credenciales de inicio de sesión correctas
- 8. Rails 3 and Devise: redireccionando a la página siguiente al registro (confirmable)
- 9. ¿Cómo devuelve errores de formulario de inicio de sesión a la misma página utilizando PHP?
- 10. interfaces de inyección e inicio de sesión de dependencia
- 11. Depuración e inicio de sesión Levante usando SBT
- 12. Django: HTTPS solo para la página de inicio de sesión?
- 13. Configuración Diseñar inicio de sesión sean página raíz
- 14. Rails: Warden/Devise: cómo capturar la url antes del inicio de sesión/acceso fallido
- 15. inicio de sesión automático después de un registro exitoso
- 16. Iniciando sesión sin mostrar una página de inicio de sesión
- 17. Composite C1 - Proveedor de membresía - Registro simple e inicio de sesión
- 18. Cómo cambiar las URL de inicio de sesión y de registro en el complemento Rails3
- 19. la página de inicio de sesión después de playframework
- 20. htaccess rule para reenviar/iniciar sesión/y/iniciar sesión en la misma página?
- 21. ¿Cómo continuar el inicio de sesión en la misma línea en Java?
- 22. Stop Devise de la sesión de borrado
- 23. ¿Cómo pasar la página de inicio de sesión con Wget?
- 24. Log4j Inicio de sesión en un archivo de registro compartido
- 25. ¿Cuál es el nombre del asistente de ruta para una página de inicio de sesión en Devise?
- 26. usuarios de la aplicación de registro de cuenta e inicio de sesión, la mejor manera de manejar?
- 27. Inicio de sesión en J2ME
- 28. Redirigir después de iniciar sesión con Devise
- 29. Dónde está la vista de inicio de sesión para Devise-Rails 3
- 30. GXT: Cómo traer la página de inicio de sesión cuando la sesión expira
¿Puedes mostrar el código de las visitas/controladores relevantes? –
[Compruebe mi respuesta aquí] (http://stackoverflow.com/a/17001874/1297435) sobre este caso. –