リクエストをリダイレクトする可能性のあるチェックをどこに配置すればよいですか?

StackOverflow https://stackoverflow.com/questions/837046

質問

パスワードの有効期限が切れている場合、ユーザーを[パスワードの変更]ページにリダイレクトする必要があります。

このコードを1か所に配置して、リクエストをパスワード変更ページにリダイレクトできるようにします。

AuthorizeAttributeの拡張とOnActionExecutingのオーバーライドを検討しましたが、どちらも機能しない/ルーティングロジックを短絡してパスワード変更ページにリダイレクトすることはできません。

少し明確にするために、ロジックは次のようになります。

不正なリクエスト:
->任意のURL-> AuthorizeAttribute-> Login.aspx->パスワードの有効期限が切れました-> ChangePassword.aspx

承認済みリクエスト:
->任意のURL-> ??????? -> ChangePassword.aspx

それは????どうしたらいいかわからないという部分。


AuthorizeAttributeを拡張すると思います。パスワード変更コントローラーのメソッドを どこでも使用します。

役に立ちましたか?

解決

public class DenyExpiredPasswordAttribute : AuthorizeAttribute
{

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        IPrincipal user = filterContext.HttpContext.User;

        if(user != null)
        {
            if (user.Identity.IsAuthenticated)
            {

                if (CurrentUser.PasswordExpired) // your checking of password expiration
                {
                    filterContext.HttpContext.Response.Redirect("~/Account/ChangePassword?reason=expired");
                }
            }
        }
        base.OnAuthorization(filterContext);
    }
}

これは正常に機能します。この属性ですべてのコントローラーをマークするだけで、「アカウント」を除外できます。 1。この方法では、有効期限が切れた属性を持つユーザーは、パスワードを変更するまで続行できません。

他のヒント

global.asaxでPostAuthenticateRequestイベントのイベントハンドラーを追加する方法を確認できます。

protected void Application_Start(object sender, EventArgs e) {
  this.PostAuthenticateRequest += new EventHandler(Global_PostAuthenticateRequest);
}

void Global_PostAuthenticateRequest(object sender, EventArgs e)
{
 if (passwordExpired) {
   Context.Response.Redirect("~/ChangePassword.aspx");
   }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top