在ASP.NET中针对用户的自定义数据库设置身份验证的最佳方法是什么?我目前的设置不是很好,我确信有更好的方法来进行身份验证,但我能找到的只是一些七八年的文章。我目前的设置如下:
这种方法的缺陷是它调用:
Response.Redirect("~/login.aspx", false)
执行Page_load方法的整个主体。有更好的身份验证方式吗?像自定义页面类或HTTPModules这样的工作会起作用吗?
答案 0 :(得分:1)
您可以在请求中尽早进行检查,例如OnInit
,或者您可以做一些更强大的工作,例如实施您自己的会员提供商:MSDN article / Video tutorial < / p>
答案 1 :(得分:0)
好的,基本上我是这样做的。我写了这个继承自System.Web.UI.Page
的类。我覆盖OnInit
事件,这是身份验证发生的地方(根据用户数据库查找Windows用户名)。如果用户未通过身份验证,则isTerminating
设置为true,OnLoad
事件仅在isTerminating
为false
时运行。我尝试将Response.Redirect与第二个参数设置为false,但这仍然会运行所有后续页面事件。 (即使拨打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事件是最好的事情,但似乎“似乎”工作正常。