2014-11-27 2 views
0

Я пытаюсь использовать Facebook для авторизации пользователей с помощью проверки подлинности форм в ASP.NET MVC. Я получаю токен доступа от Facebook и URL-адрес аватара пользователя и передаю эти данные контроллеру, все это прекрасно работает до момента, когда мне нужно перенаправить пользователя. Я пробовал FormsAuthentication.RedirectFromLoginPage, RedirectToAction, Response.Redict. Ни один из этих методов не работает, а также никаких ошибок. Вот контроллер:ASP.NET MVC не работает с аутентификацией форм

 [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(); 
     } 
+0

ли вы называете 'метод login' с помощью AJAX? –

+0

Да, это так. –

ответ

1

Вы не можете сделать простой редирект при попытке доступа к методу действия через AJAX. Вам необходимо сделать переадресацию в вашем JS-коде, предоставив URL-адрес ответа от действия вашего контроллера.

Вы можете просто вернуть URL переадресации из контроллера и выполните следующие действия в JS:

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

И в контроллере:

return Json(new {Url = "/Home/Index"}); 
Смежные вопросы