ASP.NET MVC无法使用Forms身份验证

时间:2014-11-27 15:11:52

标签: c# asp.net asp.net-mvc facebook asp.net-mvc-4

我正在尝试通过ASP.NET MVC中的表单身份验证使用Facebook进行用户授权。 我从Facebook和用户头像网址获取访问令牌并将这些数据传递给Controller,所有这些工作都很好,直到我需要重定向用户的那一刻。 我之前尝试过FormsAuthentication.RedirectFromLoginPageRedirectToActionResponse.Redict。这些方法都没有工作,也没有错误。 这是控制器:

        [HttpPost]
        public ActionResult Login(string Url, string AccessToken)
        {
            string username;
            string fullname;
            var client = new Facebook.FacebookClient(AccessToken);
            dynamic result = client.Get("me", new { fields = "username,first_name,last_name" });
            if (result.first_name == null | result.last_name == null)
            {
                username = result.username;
                fullname = null;
            }
            else
            {
                username = result.username;
                fullname = result.first_name + " " + result.last_name;
            }
            if (UserExist(username) == false)
            {
                CreateUser(username, Url, fullname);
                //FormsAuthentication.SetAuthCookie(username, true);
                //return RedirectToAction("Register", "Home");
                FormsAuthentication.RedirectFromLoginPage(username, true);
            }
            else
            {
                HttpCookie c = Request.Cookies.Get("UserGuid");
                if (c == null)
                {
                    c = new HttpCookie("UserGuid")
                    {
                        Value = GetUserGuid(User.Identity.Name),
                        Expires = DateTime.Now.AddYears(1)
                    };
                    Response.Cookies.Add(c);
                }
                if (result.first_name == null || result.last_name == null)
                {
                    username = result.username;
                }
                else
                {
                    username = result.first_name + " " + result.last_name;
                }
                try
                {
                    //FormsAuthentication.SetAuthCookie(username, true);
                    //Response.Redirect(FormsAuthentication.DefaultUrl);
                    FormsAuthentication.RedirectFromLoginPage(username, true);
                }
                catch (Exception)
                {
                    throw new Exception();
                }
            }
            return View();
        }

1 个答案:

答案 0 :(得分:1)

通过AJAX访问操作方法时,无法进行简单的重定向。您需要通过控制器操作提供响应URL来在JS代码中进行重定向。

您只需从控制器返回重定向网址,然后在JS中执行以下操作:

$.ajax({
  url: url, 
  data: data,
  success: function(resp) {
     window.location.href = resp.Url;
  }
})

在你的控制器中:

return Json(new {Url = "/Home/Index"});