Benutzer sein Usermanagement Passwort ändern lassen

Aus APF Wiki [de]
Wechseln zu: Navigation, Suche

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
Meine Werkzeuge
Namensräume
Varianten
Aktionen
menü
misc
Werkzeuge