2011-06-24 137 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事件是做的最好的事情,但它“似乎”很好地工作。