2013-08-28 23 views
5

Muszę wprowadzić taką funkcję. To musi działać, aby x dni po ostatniej zmianie hasła, a kiedy zalogujesz się, otrzymasz wiadomość z napisem: Twoje hasło wygasło, wprowadź nowe hasło i potwierdź nowe hasłoSitecore Wymuszona zmiana hasła

Czy masz jakieś pomysły/sugestie, jak to zrobić we właściwy sposób?

+0

Czy sprawdzasz użytkowników CMS lub użytkowników witryny? –

+0

Cześć, sprawdzam użytkowników Cms. –

Odpowiedz

5

Możesz dodać własny procesor jako pierwszy procesor loggingin rurociągu z Process metody:

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"); 
     } 
    } 
} 

To będzie przekierowywać wszystkich użytkowników, które wymagają zmiany hasła do /passwordchangepage URL. Na tej stronie utwórz formularz dla starego hasła i nowego hasła.

Na złożenie formularza wykonać zmianę hasła:

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

model zabezpieczeń Sitecore jest oparty na ASP.NET jednym, które w rzeczywistości nie posiada takiej funkcjonalności, jak również. Wygląda to bardziej na dostosowanie zwykłej funkcjonalności ASP.NET, w rzeczywistości niezwiązanej z Sitecore. Mogę jednak przedstawić kilka sugestii, jak to wdrożyć.

Można utworzyć 2 właściwości dla profilu użytkownika: jedna właściwość do czasu wygaśnięcia (lub ustawienie w pliku web.config), druga do zachowania daty ostatniej aktualizacji hasła. Następnie powinieneś nieco zmienić swoją logikę uwierzytelniania.

Przede wszystkim, zanim użytkownik zostanie uwierzytelniony, należy sprawdzić wartości nowych pól niestandardowych dla użytkownika określonego w formularzu logowania. Następnie, jeśli hasło wygasło, poproś użytkownika o jego zmianę - przekieruj go na stronę z formularzem zawierającym 3 pola: "stare hasło", "nowe hasło" i "potwierdź nowe hasło".

Mając te 3 wartości, możesz zmienić hasło użytkownika, używając odpowiedniej metody klasy MemberhipUser. Po zmianie hasła można uwierzytelnić użytkownika.

3

Użyłem postu this, aby zaimplementować tę samą funkcję w ostatnim projekcie.

Daje pełny przebieg wymaganego kodu i sposób utworzenia pliku konfiguracyjnego w celu poprawienia nowego Pipeline. Tworzy również parametry strony resetowania hasła i x dni ważności haseł.

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

Dla mojej szczególnej sytuacji klient nie chciał używać narzędzia resetowania hasła Sitemore. Stworzyłem studio graficzne z witryną sitecore i utworzyłem stronę z hasłem zmiany hasła. Kiedy już miałem tę stronę, umieściłem następujące w Global.asax mojego rozwiązania VS.

protected void Application_PostAuthenticateRequest(object sender, EventArgs e) 
    { 
     if (this.User.Identity.IsAuthenticated) 
     { 
      // Get the user as they log in 
      MembershipUser user = Membership.GetUser(); 

      // if the user is not blank 
      // and the password expiry date is less than the password policy expiration date 
      // and the user is not directly calling the change password page 
      if (user != null && user.LastPasswordChangedDate.Date.AddDays(90) < DateTime.Now.Date && !Request.Path.EndsWith("/layouts/changepw.aspx")) 
      { 
       // Then transfer to the change password page 
       Server.Transfer("~/layouts/changepw.aspx"); 
      } 
     } 
    } 

Po przejściu na stronę zmiany hasła sprawdziłem, czy zostały wysłane ze strony logowania lub z witryny internetowej. W zależności od odsyłającego URL wyświetliłem komunikat "Twoje hasło wkrótce wygasa".