我们有一个古老的经典asp应用程序,用于管理和启动我们的其他web应用程序。放置此认证逻辑的适当位置在哪里?
它启动的应用程序的方法是如下:
<form name="frmMain" action="http://xxxx/mvc3app/Index" target=_self method=post>
<script language="javascript">
frmMain.submit();
</script>
用户登录名和密码被通过作为请求的一部分传递。
验证用户在ASP.NET应用程序我把下面的authenticateUser功能:
public bool AuthenticateUser()
{
var userName = Context.Request["txtName"];
var password = Context.Request["txtPassword"];
if (Membership.ValidateUser(userName, password))
{
FormsAuthentication.SetAuthCookie(userName, true);
}
}
我认为正确的地方打电话的authenticateUser将在Global.asax中Session_Start()
方法,但它不在提交“frmMain”时似乎并没有提到这种方法。它似乎间歇性地工作 - 如果我完全关闭IE,请再试一次,然后手动输入URL。
void Session_Start(object sender, EventArgs e)
{
Log("In Session Start");
AthenticateUser();
}
哪里将是正确的地方,在我的ASP.NET应用程序来验证用户的身份?
这是一个屏幕开发工具的形式认证失败 - Session_Start()不被调用。
编辑
看起来这是行不通的,因为IsAuthenticated属性只在其上造成AUTH失败的索引操作的后续请求设置。
我现在会测试这个,但看到Who sets the IsAuthenticated property of the HttpContext.User.Identity
解决方案:
第一个错误调用SetAuthCookie这是导致指数以失败验证后没有重定向。
我也意识到,没有必要把这个在Global.asax中,但我宁愿重定向到一个登录行动,而不是直接到索引操作:
public ActionResult LogOn()
{
var userName = Context.Request["txtName"];
var password = Context.Request["txtPassword"];
if (Membership.ValidateUser(userName, password))
{
FormsAuthentication.SetAuthCookie(userName, false);
return RedirectToAction("Index", "Index");
}
else
{
return RedirectToAction("IncorrectLogin", "Index");
}
}
上的登录操作.... – devundef 2012-07-24 09:13:41
'Session_Start'被称为当用户第一次来到你网页。这是新会议的开始。考虑浏览webform应用程序的页面和应用程序生命周期。 =) – 2012-07-24 09:13:43
这看起来不像传统的ASP给我。你的意思是Asp.net的网页表单? – podiluska 2012-07-24 10:16:07