目前,我们在使用 ASP.Net Membership 应用程序时遇到了很多问题。
由于不相关的原因,我们使用了一个使用旧式 Web.config 指定凭据的 MembershipProvider 实现和一个只允许一切的 RoleProvider(RolesProvider 可能是这里的问题!)。这不是我们可以改变的,因为它是我们遇到的其他一些问题的一种有点hacky的解决方法,我们只是想让这个最小的案例工作。
MembershipProvider 实现运行良好,当我在我的机器上测试它时一切正常。但是,当我将其推送到测试服务器时,我成功进行了身份验证(并且可以在跟踪日志中看到 cookie ),但随后被直接退回到登录页面,从跟踪日志中的这些条目可以看出:
19 9/7/2010 5:50:03 PM /login.aspx 302 POST View Details
20 9/7/2010 5:50:03 PM /Default.aspx 302 GET View Details
21 9/7/2010 5:50:03 PM /login.aspx 200 GET View Details
在代码中添加了很多跟踪之后,我真的成功地进行了身份验证:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
LoginControl.LoggedIn += new EventHandler(LoginControl_LoggedIn);
LoginControl.LoginError += new EventHandler(LoginControl_LoginError);
}
void LoginControl_LoggedIn(object sender, EventArgs e)
{
Trace.Write("LoginControl_LoggedIn", "Logged in successfully");
}
void LoginControl_LoginError(object sender, EventArgs e)
{
Trace.Write("LoginControl_LoginError", "Failed to authenticate");
}
给我:
LoginControl_LoggedIn Logged in successfully 0.0044027241880433 0.000238
尝试在我被重定向到的 Default.aspx 中进行跟踪,甚至没有PreInit触发事件。
我不认为RoleProvider 是问题所在,部分原因是它实际上只是对所有事情说“是”:
public override bool IsUserInRole(string username, string roleName)
{
return true;
}
我查看了SO:62013、Forums:1318557和SO:62013 中提到的博客文章,这些都没有任何区别。
有什么想法,有人吗?我完全不知所措。