2011-06-24 48 views
1

在ASP.NET中設置對用戶自定義數據庫進行身份驗證的最佳方式是什麼?我目前的設置不是很好,我相信有更好的方法來進行身份驗證,但我可以找到的是一些七八歲的文章。我目前的設置如下:asp.net中的自定義身份驗證

  • 應用程序使用Windows用戶名(通過Windows身份驗證)來確定用戶是否在允許的用戶數據庫中。這是通過調用Page_Load中的Authenticate方法完成的。
  • 如果用戶不在允許的用戶中,那麼該頁面將重定向到登錄屏幕。

這種方法的缺點是,它要求:

Response.Redirect("~/login.aspx", false) 

其執行Page_Load方法的整個身體。有沒有更好的認證方式?會像自定義頁面類或HTTPModules做這項工作嗎?

回答

1

你可以做你的支票早些時候要求,如在OnInit,或者你可以做的東西多一點健壯,喜歡實現自己的成員提供:MSDN article/Video tutorial

+0

這可以推到一個基類,所有的頁面可以繼承,不是嗎? – ScottD

+0

是的,使用基頁類是這種功能的一個好主意。 – wsanville

+0

非常好,那正是我將要做的。現在似乎很明顯,我想到了它。 – ScottD

0

好了,所以這基本上是我怎麼完成了。我寫了這個繼承自System.Web.UI.Page的類。我重寫了OnInit事件,這是身份驗證發生的地方(根據用戶數據庫查找Windows用戶名)。如果用戶未通過身份驗證,則isTerminating設置爲true,並且OnLoad事件僅在isTerminatingfalse時運行。我試着將第二個參數設置爲false來讓Response.Redirect獨立運行,但是這仍然會運行所有後續頁面事件。 (即使到HttpApplication.CompleteRequest()通話)

public class BasePageClass : Page 
{ 
    private bool isTerminating = false; 

    protected override void OnInit(EventArgs e) 
    { 
     isTerminating = !AuthenticationManager.Authenticate(); 

     base.OnInit(e); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     if (!isTerminating) 
     { 
      base.OnLoad(e); 
     } 
    } 
} 

我不知道是否沒有運行在onload事件是做的最好的事情,但它「似乎」很好地工作。