2013-08-28 19 views
5

Ich muss eine solche Funktion implementieren. Es muss so arbeiten, dass x Tage nach der letzten Änderung Ihres Passworts, wenn Sie sich anmelden, erhalten Sie eine Nachricht, dass Ihr Passwort abgelaufen ist, geben Sie bitte ein neues Passwort ein und bestätigen Sie das neue PasswortSitecore Forced Passwort ändern

Haben Sie welche Ideen/Vorschläge wie man das richtig macht?

+0

Überprüfen Sie CMS-Benutzer oder Website-Benutzer? –

+0

Hallo, ich überprüfe Cms Benutzer. –

Antwort

5

Sie können Ihren eigenen Prozessor als erster Prozessor von loggingin Pipeline mit Process Methode hinzufügen:

public void Process(LoggingInArgs args) 
{ 
    MembershipUser user = Membership.GetUser(args.Username); 
    if (user != null) 
    { 
     DateTime date = user.LastPasswordChangedDate; 
     if ((DateTime.Now - date).TotalDays > maxDaysWithoutPasswordChange) 
     { 
      HttpContext.Current.Response.Redirect("/passwordchangepage"); 
     } 
    } 
} 

Diese alle Benutzer umleitet, die /passwordchangepage URL zur Passwortänderung erforderlich. Auf dieser Seite erstellen Sie ein Formular für altes Passwort und neues Passwort.

Auf Absenden des Formulars Kennwortänderung durchführen:

MembershipUser user = Membership.GetUser(username); 
user.ChangePassword(oldPassword, newPassword); 
0

Sitecores Sicherheitsmodell basiert auf ASP.NET ein, die eigentlich nicht solche Funktionalität als auch hat. Das sieht eher wie eine Anpassung der allgemeinen ASP.NET-Funktionalität aus, die sich nicht auf Sitecore bezieht. Ich kann Ihnen jedoch einige Vorschläge machen, wie Sie dies umsetzen können.

Sie können zwei Eigenschaften für das Benutzerprofil erstellen: eine Eigenschaft für die Ablaufdauer (oder die Einstellung in web.config), eine weitere, um das Datum der letzten Kennwortaktualisierung beizubehalten. Dann sollten Sie Ihre Authentifizierungslogik etwas ändern.

Bevor der Benutzer authentifiziert wird, sollten Sie zunächst die Werte der neuen benutzerdefinierten Felder für den Benutzer überprüfen, der im Anmeldeformular angegeben ist. Wenn das Passwort abgelaufen ist, bitten Sie den Benutzer, es zu ändern - leiten Sie es auf eine Seite mit einem Formular mit 3 Feldern um: "altes Passwort", "neues Passwort" und "neues Passwort bestätigen".

Mit diesen 3 Werten können Sie das Benutzerkennwort mit der entsprechenden Methode der MembershipUser-Klasse ändern. Nachdem das Passwort geändert wurde, können Sie den Benutzer authentifizieren.

3

Ich habe this Beitrag verwendet, um die gleiche Funktionalität in einem aktuellen Projekt zu implementieren.

Es gibt Ihnen einen vollständigen Durchlauf des erforderlichen Codes und wie Sie die Konfigurationsdatei zum Patchen der neuen Pipeline erstellen. Erstellt außerdem Parameter für die Seite zum Zurücksetzen des Kennworts und die Kennwörter für den Ablauf von x Tagen.

public class CheckPasswordExpiration 
    { 
     private TimeSpan TimeSpanToExpirePassword { get; set; } 
     private string ChangePasswordPageUrl { get; set; } 

     public void Process(LoggingInArgs args) 
     { 
      Assert.ArgumentNotNull(args, "args"); 
      if (!IsEnabled()) 
      { 
       return; 
      } 

      MembershipUser user = GetMembershipUser(args); 
      if (HasPasswordExpired(user)) 
      { 
       WebUtil.Redirect(ChangePasswordPageUrl); 
      } 
     } 

     private bool IsEnabled() 
     { 
      return IsTimeSpanToExpirePasswordSet() && IsChangePasswordPageUrlSet(); 
     } 

     private bool IsTimeSpanToExpirePasswordSet() 
     { 
      return TimeSpanToExpirePassword > default(TimeSpan); 
     } 

     private bool IsChangePasswordPageUrlSet() 
     { 
      return !string.IsNullOrWhiteSpace(ChangePasswordPageUrl); 
     } 

     private static MembershipUser GetMembershipUser(LoggingInArgs args) 
     { 
      Assert.ArgumentNotNull(args, "args"); 
      Assert.ArgumentNotNullOrEmpty(args.Username, "args.Username"); 
      return Membership.GetUser(args.Username, false); 
     } 

     private bool HasPasswordExpired(MembershipUser user) 
     { 
      return user.LastPasswordChangedDate.Add(TimeSpanToExpirePassword) <= DateTime.Now; 
     } 
    } 
1

Für meine spezielle Situation wollte der Kunde das Sitecore-Passwort-Reset-Tool nicht verwenden. Ich habe eine visuelle Studio-Lösung meiner Sitecore-Website erstellt und eine gebrandete Change-Passwort-Seite erstellt. Sobald ich die Seite hatte, platzierte ich folgendes in der Global.asax meiner VS-Lösung.

Sobald sie die Change Password Seite getroffen haben, habe ich überprüft, ob sie von der Anmeldeseite oder von der Website gesendet wurden. Abhängig vom URL-Referrer habe ich die entsprechende Meldung "Ihr Passwort wird bald ablaufen" angezeigt.

Verwandte Themen