このような機能を実装する必要があります。 パスワードを最後に変更してからx日後にログインしたときに、パスワードの有効期限が切れたことを知らせるメッセージが表示されたら、新しいパスワードを入力して新しいパスワードを確認してください。Sitecore強制パスワード変更
アイデア/提案どのように適切な方法でそれを行うには?
このような機能を実装する必要があります。 パスワードを最後に変更してからx日後にログインしたときに、パスワードの有効期限が切れたことを知らせるメッセージが表示されたら、新しいパスワードを入力して新しいパスワードを確認してください。Sitecore強制パスワード変更
アイデア/提案どのように適切な方法でそれを行うには?
あなたはProcess
方法とloggingin
パイプラインの最初のプロセッサとして独自のプロセッサを追加することができます
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");
}
}
}
これは/passwordchangepage
URLにパスワードの変更を必要とするすべてのユーザーをリダイレクトします。このページでは、古いパスワードと新しいパスワードのフォームを作成します。フォームは、パスワードの変更を実行して提出するには
:
MembershipUser user = Membership.GetUser(username);
user.ChangePassword(oldPassword, newPassword);
サイトコアのセキュリティモデルは、実際にもこのような機能を持っていないASP.NET 1、に基づいています。これは、一般的なASP.NET機能のカスタマイズのように見えますが、実際にはSitecoreには関係しません。しかし、私はこれを実装する方法のいくつかの提案をあなたに提供することができます。
ユーザープロファイルの2つのプロパティを作成できます.1つは有効期限(またはweb.configでの設定)、もう1つは最後にパスワードを更新する日付です。次に、認証ロジックを少し変更する必要があります。
まず、ユーザーが認証される前に、ログインフォームで指定されたユーザーの新しいカスタムフィールドの値を確認する必要があります。次に、パスワードが期限切れになった場合は、ユーザーに変更を依頼します。「古いパスワード」、「新しいパスワード」、「新しいパスワードの確認」の3つのフィールドを含むフォームにリダイレクトします。
これらの3つの値を持つと、適切なMemberhipUserクラスのメソッドを使用してユーザーパスワードを変更できます。パスワードを変更すると、ユーザーを認証できます。
私はthis投稿を使って、最近のプロジェクトで同じ機能を実装しました。
これは、必要なコードを完全に実行し、新しいファイルPipeline
にパッチを適用するための設定ファイルを作成する方法を示します。また、パスワードリセットページのパラメータと、パスワードを期限切れにするx日を作成します。
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;
}
}
私の特定の状況では、顧客はsitecoreパスワードリセットツールを使用したくなかった。私は自分のサイトコアWebサイトのビジュアルスタジオソリューションを作成し、ブランド変更パスワードページを作成しました。私がこのページを手に入れたら、VSソリューションのGlobal.asaxに次のものを置いた。
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");
}
}
}
パスワード変更ページが表示されると、ログインページやウェブサイトから送信されたかどうかを確認しました。 URLリファラーに応じて、適切な「パスワードはすぐに期限切れになります」というメッセージが表示されました。
CMSユーザーまたはウェブサイトユーザーをチェックしていますか? –
こんにちは私はCmsユーザーをチェックしています。 –