2013-08-28 14 views
5

Ho bisogno di implementare tale funzione. Deve funzionare in modo che x giorni dopo aver cambiato la password, quindi quando si effettua il login si ottiene un messaggio che dice, la password è scaduta, si prega di inserire una nuova password e confermare la nuova passwordCambio password forzata Sitecore

Avete qualche idee/suggerimenti su come farlo nel modo giusto?

+0

Stai verificando utenti CMS o utenti del sito web? –

+0

Ciao Sto controllando gli utenti di Cms. –

risposta

5

È possibile aggiungere il proprio processore come un primo processore di loggingin pipeline con Process metodo:

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

Questo reindirizzerà tutti gli utenti che necessitano di modifica della password al /passwordchangepage URL. In questa pagina crea un modulo per la vecchia password e la nuova password.

Sulla trasmissione del modulo eseguire la modifica della password:

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

modello di sicurezza di Sitecore è basata su ASP.NET uno, che in realtà non ha tale funzionalità pure. Quindi sembra più una personalizzazione della funzionalità ASP.NET comune, non in realtà correlata a Sitecore. Tuttavia, posso fornire alcuni suggerimenti su come implementarlo.

È possibile creare 2 proprietà per il profilo utente: una proprietà fino alla scadenza (o un'impostazione nel web.config), un'altra per mantenere la data dell'ultimo aggiornamento della password. Quindi dovresti cambiare un po 'la logica di autenticazione.

Prima di tutto, prima che l'utente sia autenticato, è necessario verificare i valori dei nuovi campi personalizzati per l'utente specificato nel modulo di accesso. Quindi se la password è scaduta chiedi all'utente di cambiarla - reindirizzalo a una pagina con qualche modulo contenente 3 campi: "vecchia password", "nuova password" e "conferma nuova password".

Avendo questi 3 valori è possibile modificare la password utente utilizzando il metodo appropriato della classe MemberhipUser. Dopo aver cambiato la password, puoi autenticare l'utente.

3

Ho utilizzato il post this per implementare la stessa funzionalità in un progetto recente.

Fornisce una copia completa del codice richiesto e come creare il file di configurazione per applicare la patch al nuovo Pipeline. Crea inoltre parametri per la pagina di reimpostazione della password e gli x giorni per la scadenza delle password.

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

Per la mia situazione particolare, il cliente non desiderava utilizzare lo strumento di reimpostazione della password di sitecore. Ho creato una soluzione di Visual Studio del mio sito Web Sitecore e creato una pagina di modifica della password di marca. Una volta ottenuta la pagina, ho inserito quanto segue nel Global.asax della mia soluzione 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"); 
      } 
     } 
    } 

Dopo aver premuto la pagina di modifica della password, ho controllato se erano stati inviati dalla pagina di accesso o dal sito Web. A seconda del referrer URL ho visualizzato il messaggio appropriato "la password scadrà presto".