2011-01-13 2 views
5

Ich habe eine Aktion, mit der Benutzer sein Passwort ändern können. Wenn alles gut geht, möchte ich ihn ausloggen und eine Nachricht anzeigen, dass alles gut gegangen ist und er sich jetzt mit seinem neuen Passwort einloggen muss.Grails Spring Security Core Logout-Nachricht

Ich habe versucht:

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

Sache ist, dass Logout Controller Umleitung macht:

redirect uri: SpringSecurityUtils.securityConfig.logout.filterProcessesUrl 

Und meine Flash-Mitteilung nicht mehr da ist, wenn der Benutzer aus definitiv angemeldet ist und zurück auf die Hauptseite. Irgendwelche Ideen, wie es funktioniert oder vielleicht ein paar Workarounds?

+1

Einfach nur neugierig, warum protokollieren Sie sie aus? Wenn ich das System benutze, würde ich nicht erwarten, dass ich ausgeloggt werde, nachdem ich mein Passwort geändert habe. –

+0

Kein besonderer Grund. Ich denke nur, dass es so besser ist;) – jjczopek

Antwort

3

LogoutController ist nur als Annehmlichkeit da. Es ist ein Filter, der seine Umleitung ab und führt die Abmelde Logik, so können Sie einfach direkt an das umleiten:

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

Funktioniert das tatsächlich? Wenn ich es ausprobiert habe, tut es das nicht. Wenn ich "filterProcessesUrl" zusammen mit einer "flash.message" umleite, steht die Flash-Nachricht für "filterProcessesUrl" zur Verfügung, aber sie leitet dann zu "logout.afterLogoutUrl" um und verliert dann jede Flash-Nachricht in der zweiten Weiterleitung. Diese 4-jährige Gral-Ausgabe spricht darüber http://jira.grails.org/browse/GRAILS-2336 Um dies zum Laufen zu bringen, würde ich denken, dass 'filterProcessesUrl' sehen müsste, ob es einen 'Flash' erhalten hat. Nachricht "und stellen Sie es erneut ein, um sicherzustellen, dass es verbreitet wird. –

+1

Ich habe diesen Vorschlag versucht, aber es zeigt keine flash.message. Ich benutze Grails 2.1.1 –

+1

Ich habe dies mit Feder-Security-Core-2.0-RC2 versucht und es funktioniert auch nicht mit. "Debug sagt DEBUG logout.SimpleUrlLogoutSuccessHandler - Standard-URL verwenden:/login" und ignoriert den Wert für grails.plugin.springsecurity.logout.afterLogoutUrl = '/ login/auth'. Das Debug-Protokoll zeigt an, dass die Abmeldung zur Anmeldung geleitet wird, dann wird der Login an login/auth weitergeleitet. – spock99

0

Hier ist ein Work-around ist für dieses Problem:

  • Invalidate die Sitzung
  • Richten Sie die Flash-Mitteilung
  • Redirect auf eine leere Seite
  • Dann führen wir jQuery delay und fadeutAndRemove auf der Flash-Mitteilung div, die dann auf den Logout-Controller leitet

Es ist nicht perfekt, aber es wird die Nachricht an den Benutzer und nimmt sie zurück auf die Login-Seite