如何通过ashx将用户登录到DotNetNuke?

时间:2013-04-09 16:42:13

标签: c# forms-authentication dotnetnuke

我们有一个页面大量使用网址中的哈希来表示用户当前正在查看的弹出窗口。我们正在尝试设置它,因此如果用户单击一个按钮,它们会显示一个登录表单,该表单将登录并重新加载它们所在的页面(包括#!)。

我决定通过ajax,在登录弹出窗口中使用标准表单,并使用以下代码将单击按钮绑定到ashx的ajax调用:

    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,用户名和密码(通过浏览器网址调用)时,它会返回LoginStatus.LOGIN_SUPERUSER的结果。根据fiddler的说法,JSON将返回以下cookie标头:

Set-Cookie: .DOTNETNUKE=5E48DC014F447BA2ED6ADFA09138D3E089B52E3A6ECFAD0AE45B7EB94842B48EE84529F92F34B1ABE7D1BBF580F3AF91446ED70177EF967588D0518802C397AD5831CA941CDF15F9C625075E9F2403A743B20AFC380E01DBE6383587E06D85D61A6485FA; expires=Tue

但是,一旦我导航到我的主页,网络服务器就会将我注销,并发回以下Cookie标头:Set-Cookie: .DOTNETNUKE=; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; HttpOnly

我已经确认PortalSettings.Current指向正确的门户网站。

如何坚持登录?

1 个答案:

答案 0 :(得分:1)

原来我错误地使用了UserController.ValidateUser()而不是UserControll.UserLogin()