2011-01-13 16 views
5

Tengo una acción que permite al usuario cambiar su contraseña. Cuando todo va bien, me gustaría cerrar sesión y mostrar un mensaje de que todo ha ido bien y ahora necesita iniciar sesión con su nueva contraseña.Grails Spring Security Core mensaje de cierre de sesión

me trataron:

flash.message = "You may now login with your new password" 
redirect (controller: 'logout') 

La cosa es que el controlador Salir hace redirección a:

redirect uri: SpringSecurityUtils.securityConfig.logout.filterProcessesUrl 

Y mi mensaje flash ya no está allí cuando el usuario está definitivamente cerrado sesión y volver a la página principal. ¿Alguna idea de cómo hacer que funcione o tal vez algunas soluciones?

+1

Sólo por curiosidad, ¿por qué estás registrando a cabo? Si estuviera usando el sistema, no esperaría cerrar la sesión después de cambiar mi contraseña. –

+0

Sin motivo especial. Solo estoy pensando que es mejor así;) – jjczopek

Respuesta

3

LogoutController está allí para su comodidad. Hay un filtro que intercepta la redirección y lleva a cabo la lógica de cierre de sesión, lo que sólo puede redirigir directamente a éste:

flash.message = "You may now login with your new password" 
redirect uri: SpringSecurityUtils.securityConfig.logout.filterProcessesUrl 
+3

¿Esto realmente funciona? Cuando lo he probado, no funciona. Si redirecciono a 'filterProcessesUrl' junto con' flash.message', el mensaje flash está disponible para 'filterProcessesUrl', pero luego lo redirige a' logout.afterLogoutUrl' y luego pierde cualquier mensaje flash en la segunda redirección. Este tema de 4 años sobre Grails habla de ello http://jira.grails.org/browse/GRAILS-2336 Para que esto funcione, creo que el 'filterProcessesUrl' necesitaría ver si se recibió un' flash '. message' y luego configúrelo nuevamente para asegurarse de que se propague. –

+1

He intentado esta sugerencia, pero no revela un mensaje flash.message. Estoy usando Grails 2.1.1 –

+1

He intentado esto con spring-security-core-2.0-RC2 y tampoco funciona con él. 'Debug dice DEBUG logout.SimpleUrlLogoutSuccessHandler - Usando Url predeterminado:/login' y está ignorando el valor establecido para grails.plugin.springsecurity.logout.afterLogoutUrl = '/ login/auth'. El registro de depuración muestra que el cierre de sesión se dirige al inicio de sesión, luego se inicia sesión para iniciar sesión/auth – spock99

0

Aquí es una solución temporal para este problema:

  • invalidar la sesión
  • Configuración del mensaje flash
  • redirección a una página vacía
  • Entonces corremos jQuery delay y fadeutAndRemove en el Flash mensaje div que luego se vuelve a dirigir al controlador de cierre de sesión

No es perfecto pero se pone el mensaje al usuario y los lleva de vuelta a la página de inicio de sesión

Cuestiones relacionadas