我有的?
我已经在其中一个 Web 应用程序中配置了 FBA,开箱即用的登录页面具有下拉框来选择窗口或 FBA 登录。一切正常。
我想要的是?
我想要一个自定义登录页面,其中包含用户名和密码的文本框以及一个登录按钮,用于验证 Windows 和 FBA 用户。为了区分两个不同的登录,我想处理 OnAuthenticate 事件并检查用户名是否包含“\”然后假设它是 Windows 用户,否则它是 FBA 用户。
这是在 OnAuthenticate 事件处理程序中编写的代码:
protected void signinControl_Authenticate(object sender, AuthenticateEventArgs e)
{
string fullUserName = signinControl.UserName;
string username = null;
if (fullUserName.Contains("\\")) //Windows user
{
string domain = fullUserName.Substring(0, fullUserName.IndexOf("\\"));
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain))
{
username = fullUserName.Substring(fullUserName.IndexOf("\\") + 1);
e.Authenticated = pc.ValidateCredentials(username, signinControl.Password);
}
}
else //FBA user
{
e.Authenticated = Membership.ValidateUser(fullUserName, signinControl.Password);
}
}
我面临什么问题?
上面的代码适用于 FBA 用户。但是,当我尝试使用 Windows 用户登录时,即使在验证后e.Authenticated
设置true
了,它也会抛出此错误:“您的登录尝试不成功。请重试。”。
e.Authenticated = pc.ValidateCredentials(username, signinControl.Password);
我相信,设置e.Authenticated
应该true
将用户从登录页面重定向到请求的页面。如果我必须做任何其他事情来让 Windows 用户登录,有人可以帮我吗?
更新 1:
我用SetAuthCookie()
方法显式设置Cookie,结果还是一样。
FormsAuthentication.SetAuthCookie(username, true);