أين يجب أن أضع الاختيار التي يمكن إعادة توجيه طلب ؟

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

سؤال

أنا بحاجة إلى إعادة توجيه المستخدمين إلى صفحة تغيير كلمة المرور إذا انتهت مدة صلاحية كلمة المرور.

أريد أن وضع هذا الرمز في مكان واحد بحيث أن أي طلب يمكن إعادة توجيه إلى صفحة تغيير كلمة المرور.

لقد بحثت في توسيع AuthorizeAttribute و تجاوز OnActionExecuting, ولكن لا تعمل/اسمحوا لي أن ماس كهربائى التوجيه منطق إعادة توجيه إلى صفحة تغيير كلمة المرور.

لبعض التوضيح ، المنطق ليكون:

غير المصرح به الطلب:
-> أي عنوان URL -> AuthorizeAttribute -> تسجيل الدخول.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);
    }
}

هذا يعمل بشكل جيد ، مجرد علامة كل وحدة تحكم مع هذه السمة استبعاد "الحساب" واحد.هذه الطريقة لا المستخدم مع صلاحية السمة قادرة على الاستمرار حتى تغيير كلمة المرور.

نصائح أخرى

هل يمكن أن ننظر في إضافة معالج الحدث من أجل PostAuthenticateRequest الحدث العالمي.asax.

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