Benutzer sein Usermanagement Passwort ändern lassen
Aus APF Wiki [de]
Beschreibung
Mit folgendem Code ist es möglich in einem mittels Passwort und dem Usermanagement Modul gesicherten Bereich dem eingeloggten User zu erlauben sein Passwort zu ändern.
Controller:
import('modules::genericormapper::data', 'GenericDomainObject'); class controller extends Base_controller { public function transformContent() { $form = &$this->__getForm('passwordchange'); $save = &$form->getFormElementByName('change'); if ($form->isSent() == true && $form->isValid() == true && $save->isSent() == true) { //Aktuelle User ID (zb aus einem model holen $CMSWAdmin = &$this->__getServiceObject('dev::cmsw::core', 'CMSWAdminModel', 'SESSIONSINGLETON'); $userid = $CMSWAdmin->getUserID(); //Zugriff auf Usermanagement Modul $uM = &$this->__getAndInitServiceObject('modules::usermanagement::biz', 'UmgtManager', 'Default'); //User Objekt aus der DB holen $user = $uM->loadUserByID($userid); //Passwort erhalten und setzten $passField1 = &$form->getFormElementByName('Password'); $pass1 = $passField1->getAttribute('value'); $user->setProperty('Password', $pass1); //Speichern $uM->saveUser($user); //Benachrichtigung erstellen. $forwardMessageMgr = &$this->__getServiceObject('extensions::forwardmessage::biz', 'ForwardMessageManager', 'SESSIONSINGLETON'); $forwardMessageMgr->addMessage('changepassword', 'Passwort erfolgreich geändert.', true, "message"); } $form->transformOnPlace(); } }
Template:
<@controller namespace="dev::user::changepassword" file="controller" class="controller" @> <core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" /> <html:form name="passwordchange" > <form:error name="error"><div id="fehler"><ul> </form:error> <form:listener control="Password" validator="TextLengthValidator" > <li>Das Passwort muss mindestens 10 Zeichen haben.</li> </form:listener> <form:listener control="pass2" validator="FieldCompareValidator"> <li>Die beiden Passwörter sind nicht identisch</li> </form:listener> <form:error name="error"></ul></div> </form:error> <label id="password">Passwort: </label> <form:password name="Password" ref="pass2" minlength="10" /> <label id="password2">Passwort (Nocheinmal): </label> <form:password name="pass2" /> <form:addvalidator class="TextLengthValidator" button="change" control="Password" mode="strict" type="special"/> <form:addvalidator class="FieldCompareValidator" control="Password" button="change" type="special"/> <form:button name="change" value="Speichern" /> </html:form>
Eingebaute Kontrollmechanismen
Er wird mittels Validator kontrolliert ob die beiden Passwortfelder gleich ausgefüllt sind und ob die Passwörter eine Mindestlänge von 10 Zeichen haben.
Verbesserungen/TODOs:
- Es ist sicher ratsam einen Validator zu schreiben der die Passwörter auf Sonderzeichen prüft.
- Clientvalidatoren einbetten