أين يجب أن أضع الاختيار التي يمكن إعادة توجيه طلب ؟
-
10-07-2019 - |
سؤال
أنا بحاجة إلى إعادة توجيه المستخدمين إلى صفحة تغيير كلمة المرور إذا انتهت مدة صلاحية كلمة المرور.
أريد أن وضع هذا الرمز في مكان واحد بحيث أن أي طلب يمكن إعادة توجيه إلى صفحة تغيير كلمة المرور.
لقد بحثت في توسيع 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");
}
}