C# 如何通过ashx将用户登录到DotNetNuke?
我们有一个页面,它大量使用url中的散列来表示用户当前正在查看的弹出窗口。我们正在尝试设置它,这样,如果用户单击按钮,他们将看到一个登录表单,该表单将登录并重新加载他们所在的确切页面(包括#!) 我决定通过ajax实现这一点,在登录弹出窗口中使用一个标准表单,并使用以下代码将单击按钮绑定到对ashx的ajax调用:C# 如何通过ashx将用户登录到DotNetNuke?,c#,forms-authentication,dotnetnuke,C#,Forms Authentication,Dotnetnuke,我们有一个页面,它大量使用url中的散列来表示用户当前正在查看的弹出窗口。我们正在尝试设置它,这样,如果用户单击按钮,他们将看到一个登录表单,该表单将登录并重新加载他们所在的确切页面(包括#!) 我决定通过ajax实现这一点,在登录弹出窗口中使用一个标准表单,并使用以下代码将单击按钮绑定到对ashx的ajax调用: public void ProcessRequest(HttpContext context) { context.Response.ContentT
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
var username = context.Request["username"];
var password = context.Request["password"];
var portalSettings = PortalSettings.Current;
var ip = GetIpAddress(context.Request);
var loginStatus = UserLoginStatus.LOGIN_FAILURE;
var result = UserController.ValidateUser(portalSettings.PortalId, username, password, string.Empty,
portalSettings.PortalName, ip, ref loginStatus);
if (loginStatus == UserLoginStatus.LOGIN_SUCCESS || loginStatus == UserLoginStatus.LOGIN_SUPERUSER)
{
FormsAuthentication.SetAuthCookie(result.UserID.ToString(), true);
context.Response.Write(JsonConvert.SerializeObject(new { Result = true}));
}
else
{
context.Response.Write(JsonConvert.SerializeObject(new { Result = false }));
}
}
这似乎有效,事实上,当我传入portalId、用户名和密码(通过浏览器url调用)时,它会返回LoginStatus.LOGIN\u SUPERUSER
的结果。根据fiddler的说法,JSON返回时带有以下cookie头:
Set-Cookie: .DOTNETNUKE=5E48DC014F447BA2ED6ADFA09138D3E089B52E3A6ECFAD0AE45B7EB94842B48EE84529F92F34B1ABE7D1BBF580F3AF91446ED70177EF967588D0518802C397AD5831CA941CDF15F9C625075E9F2403A743B20AFC380E01DBE6383587E06D85D61A6485FA; expires=Tue
但是,一旦我导航到我的主页,Web服务器就会将我注销,并将以下cookie头发送回:Set cookie:.DOTNETNUKE=;expires=星期二,1999年10月12日04:00:00 GMT;路径=/;HttpOnly
我已验证PortalSettings.Current
是否指向正确的门户
如何保持登录?结果表明,我错误地使用了
UserController.ValidateUser()
而不是UserControll.UserLogin()