Hallo TYPO3Freunde,
ich stehe hier vor einem kniffligen Problem und hoffe ihr könnt mir einen kleinen Tipp geben.
Zur Problematik ich habe eine Extension geschrieben in der sich FE User unteranderem registrieren können. Diese Registrierung findet in mehreren Schritten statt einmal werden Grundinformationen wie Vorname, Nachname, EMail als Pflichtfelder abgefragt. Anschließend wird eine EMail an den User geschickt.
Und hab hier wirds kompliziert in der Mail ist ein Link der den User auf eine Funktion schickt checkHash() in der überprüft wird ob ein User mit dem übermittelten Hash existiert wenn ja soll an den EditView weitergeleitet werden wenn nein Fehlermeldung.
In der Theorie klappt alles die Praxis zeigt hier allerdings ein Problem auf.
Da im aufgerufenen EditView noch weitere Pflichtfelder sind wie Passwort und andere Sachen funktioniert das ganze nur dann, wenn der User alles beim erstenmal Ordnungsgemäß ausfüllt und das Formular abschickt.
Aber was passiert wenn man aus irgendeinem Grund (DAU) das Browserfenster schließt oder der Browser abstürzt?
Ganz einfach was sehr schlimmes der User ist freigeschaltet.
Das Problem an dieser Stelle ist, das der EditView zum Anzeigen der bereits vorhandenen Daten ein disable = 0 also Freigeschaltenen User benötigt ansonsten wird ein leeres Formular angezeigt (nehme an ist ne Sicherheitseinstellung von TYPO3/Extbase) wenn jetzt der User aus welchen Grund auch immer seine Registrierung abbricht habe ich einen Freigeschalteten User im System.
Genau das muss ich verhindern alle meine bisherigen Versuche dies zu realisieren schlugen fehl.
Hier mal paar Ansätze von mir die Leider nicht klappten.
Ansatz 1: User freischalten per assign übergeben und wieder deaktivieren
public function editAction(Tx_MyExt_Domain_Model_User $user = NULL) {
if(!isNull($user))
$user->setDisable(0);
$this->view->assign('user',$user);
$user->setDisable(1);
}
Diese Variante hatte eine Fehlermeldung zur Folge nachdem man eine Fehler provoziert hat z.B. Passwort leer gelassen hat.
Ansatz 2: Die Hardcorevariante... im Model den User freischalten in der DB diable auf 1 setzen.
public function editAction(...) {
if(!isNull($user)) {
$user->setDisable(0);
$this->view->assign('user',$user);
$this->myRepo->setUserDisableStatus($uid,$status=1)
}
}
Wie gesagt die Repofunktion sollte nach dem assign in der DB disable auf 1 setzen. Das hatte garkeine Auswirkung nach einer Fehleingabe wurde zwar keine Fehler mehr zurückgegeben aber im BE hab ich gesehen das der User schon wieder aktiv war. Das ist irgendwie zum Mäuse melken.
Hoffe habe jetzt niemenaden zu sehr verwirrt und man kann mir einen Tipp oder Schupps in die richtige Richtung geben.
Gruß typonewbe