Loading

Baustelle Passwort-Änderung

Austausch über gewünschte Funktionen

Baustelle Passwort-Änderung

Postby micha » 15.05.2014, 14:42

Wir haben Collabtive nun seit 2 Wochen im Einsatz, und die Erfahrung hat gezeigt: wirklich alltagstauglich ist es in vielen Bereichen leider nicht.
So gab es mehrfach Probleme, dass sich unsere Leute nach einer Passwort-Änderung nicht mehr anmelden konnten. Ich habe mir das Ganze daraufhin nochmal näher angesehen und kann nur sagen: Kein Wunder! Da gibt es 3 Eingabefelder, bei denen ich nicht sehe, was ich eingebe, und beim "Speichern" gibt es Null Rückmeldung, ob die Änderung nun geklappt hat oder nicht. Die Leute versuchen dann ihr vermeintlich neues Passwort - in Wirklichkeit ist aber das alte noch im System. Klar, dass da manch einer verzweifelt.

Zur Beseitigung dieses Problems habe ich daher folgendes geändert:

1. etwas Javascript in edituserform.tpl
Code: Select all
{literal}
<script type = "text/javascript">         
   document.getElementById("newpass").addEventListener("input", verifyPass1);
   document.getElementById("repeatpass").addEventListener("input", verifyPass2);

   function verifyPass1(input) {
      input1 = document.getElementById('newpass');
      input2 = document.getElementById('repeatpass');
      if ( input1.value != input2.value ) {
         input2.setCustomValidity('{/literal}{#passwordsdontmatch#}{literal}');
      } else {
         input2.setCustomValidity('');
      }
   }
   function verifyPass2(input) {
      input1 = document.getElementById('repeatpass');
      input2 = document.getElementById('newpass');
      if ( input1.value != input2.value ) {
         input1.setCustomValidity('{/literal}{#passwordsdontmatch#}{literal}');
      } else {
         input1.setCustomValidity('');
      }
   }
</script>
{/literal}


so dass HTML5 unterstützende Browser das Formular gar nicht erst abschicken, wenn die beiden neuen Passworte nicht übereinstimmen ...
9-3-profil.jpg
9-3-profil.jpg (60.45 KiB) Viewed 7407 times


Gut, der IE kann sowas erst ab Version 10, außerdem ist es an dieser Stelle nicht so einfach abzuchecken, ob das eingegebene ALTE Passwort richtig ist. Das wird ja erst in der Klasse geprüft. Aber die liefert bei Nichtübereinstimmung immerhin ein FALSE zurück, und darauf lässt sich in manageuser.php ja entsprechend reagieren:
Code: Select all
        if ($user->edit($userid, $name, $realname, $email, $tel1, $tel2, $company, $zip, $gender, $turl, $address1, $address2, $state, $country, "", $locale, $avatar, 0)) {
      if (!empty($oldpass) and !empty($newpass) and !empty($repeatpass)) {
         if (! $user->editpass($userid, $oldpass, $newpass, $repeatpass)) {
            $loc = $url . "manageuser.php?action=editform&id=$userid&mode=passworderror";
            header("Location: $loc");
            die();
         }
      }
      $loc = $url . "manageuser.php?action=profile&id=$userid&mode=edited";
      header("Location: $loc");
        }
    }
    else
    {
        if ($user->edit($userid, $name, $realname, $email, $tel1, $tel2, $company, $zip, $gender, $turl, $address1, $address2, $state, $country, "", $locale, "", 0)) {
      if (!empty($oldpass) and !empty($newpass) and !empty($repeatpass)) {
         if (! $user->editpass($userid, $oldpass, $newpass, $repeatpass)) {
            $loc = $url . "manageuser.php?action=editform&id=$userid&mode=passworderror";
            header("Location: $loc");
            die();
         }
      }
      $loc = $url . "manageuser.php?action=profile&id=$userid&mode=edited";
      header("Location: $loc");
        }
    }


Heisst: Wenn editpass schiefgeht, landet der Benutzer einfach wieder im edituserform.tpl, dem in diesem Fehlerfall der mode "passworderror" übergeben wird. Anzeigen tue ich das einfach als Systemmeldung; dazu braucht's oben in edituserform.tpl an der üblichen Stelle oben gleich hinter <div class=user> nur noch etwas code ...
Code: Select all
   <div class="infowin_left" style = "display:block;" id = "systemmsg">
      {if $mode == "passworderror"}
      <span class="info_in_red"><img src="templates/standard/images/symbols/userlist.png" alt=""/>{#userpassworderror#}</span>
      {/if}
   </div>

Die Meldung dimme ich in diesem Fall nicht weg, sondern lasse sie einfach stehen ...
9-4-profil.jpg
9-4-profil.jpg (61 KiB) Viewed 7407 times


Egal also, ob alter oder neuer Browser: wann immer irgend etwas beim Passwort ändern schiefgeht - ich kriege jetzt ein deutliche Rückmeldung. Zu guter Letzt: Wenn es Fehlermeldungen gibt, sollte es natürlich auch Erfolgsmeldungen geben. Die kommt ins userprofile.tpl (wie oben beschrieben - dieses Mal jedoch mit Fader-Effekt)
Code: Select all
   <div class="infowin_left" style = "display:none;" id = "systemmsg">
      {if $mode == "edited"}
      <span class="info_in_green"><img src="templates/standard/images/symbols/userlist.png" alt=""/>{#profilechangessaved#}</span>
      {/if}
   </div>
   {literal}
   <script type = "text/javascript">
   systemMsg('systemmsg');
    </script>
   {/literal}

Und so sieht's dann aus ...
9-5-profil.jpg
9-5-profil.jpg (32.24 KiB) Viewed 7407 times
User avatar
micha
 
Posts: 43
Joined: 30.03.2014, 10:42
Location: Zytanien

Return to Feature Requests

Who is online

Users browsing this forum: No registered users

cron