2012-03-27 2 views
1

Просто приступив к созданию приложения, используя v6 на facebook C# sdk и застрял в процессе входа в систему для facebook. У меня есть следующий код на моей странице:Не удалось войти в facebook

string client_id = ConfigurationManager.AppSettings["APIKey"].ToString(); 
    string client_secret = ConfigurationManager.AppSettings["Secret"].ToString(); 
    string redirect_uri = ConfigurationManager.AppSettings["Url"].ToString() + "default2.aspx"; 

    FacebookClient objClient = new FacebookClient(); 

    var fbLoginUrl = objClient.GetLoginUrl(new { client_id = client_id, 
               client_secret = client_secret, 
               redirect_uri = redirect_uri, 
               response_type = "code", 
               display = "popup", 
               scope = "manage_pages,publish_stream,read_stream", 
               state = "" }); 
    //msg.Text = fbLoginUrl.ToString(); 
    Response.Redirect(fbLoginUrl.ToString()); 

Когда я перехожу на страницу, перенаправление на вход никогда не происходит. Что я делаю не так?

+0

redirect to fbLoginUrl.AbsoluteUri – prabir

+0

Спасибо @prabir даст эту попытку позже. Бежал весь день. – Jess

ответ

1

С MVC 3 (см. Опубликованный пример), я делаю вид, где начинается вход. Контроллер:

 public ActionResult Logon() 
    { 
     _fb = new FacebookClient(); 

     var csrfToken = Guid.NewGuid().ToString(); 
     Session["fb_csrf_token"] = csrfToken; 

     var state = Convert.ToBase64String(Encoding.UTF8.GetBytes(_fb.SerializeJson(new { returnUrl = returnUrl, csrf = csrfToken }))); 

     var fbLoginUrl = _fb.GetLoginUrl(
      new 
      { 
       client_id = AppId, 
       client_secret = Appsecret, 
       redirect_uri = RedirectUri, 
       response_type = "code", 
       scope = Scope, 
       state = state 
      }); 
     return Redirect(fbLoginUrl.AbsoluteUri); 
    } 

где ReturnUrl связная область просмотра в мое приложение (/ дом/fbhome) и RedirectUri это вид (loginresult), которая будет посвящена второй шаг:

 public ActionResult Loginresult(string code, string state) 
    { 
     if (string.IsNullOrWhiteSpace(code) || string.IsNullOrWhiteSpace(state)) 
      return RedirectToAction("Index", "Home"); 

     // first validate the csrf token 
     _fb = new FacebookClient(); 
     dynamic decodedState; 
     try 
     { 
      decodedState = _fb.DeserializeJson(Encoding.UTF8.GetString(Convert.FromBase64String(state)), null); 
      var exepectedCsrfToken = Session["fb_csrf_token"] as string; 
      // make the fb_csrf_token invalid 
      Session["fb_csrf_token"] = null; 

      if (!(decodedState is IDictionary<string, object>) || !decodedState.ContainsKey("csrf") || string.IsNullOrWhiteSpace(exepectedCsrfToken) || exepectedCsrfToken != decodedState.csrf) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
     } 
     catch 
     { 
      // log exception 
      return RedirectToAction("Index", "Home"); 
     } 

     try 
     { 
      dynamic result = _fb.Post("oauth/access_token", 
             new 
             { 
              client_id = AppId, 
              client_secret = Appsecret, 
              redirect_uri = RedirectUri, 
              code = code 
             }); 

      Session["fb_access_token"] = result.access_token; 

      if (result.ContainsKey("expires")) 
       Session["fb_expires_in"] = DateTime.Now.AddSeconds(result.expires); 

      if (decodedState.ContainsKey("returnUrl")) 
      { 
       if (Url.IsLocalUrl(decodedState.returnUrl)) 
        return Redirect(decodedState.returnUrl); 
       return Redirect(decodedState.returnUrl + "/notlocal"); 
      } 

      return RedirectToAction("Index", "Home"); 
     } 
     catch 
     { 
      // log exception 
      return RedirectToAction("Index", "Home"); 
     } 
    } 

So , насколько я понимаю, пользователь вводит сайт (/ home/index), затем нажмите ссылку для подключения (/ home/loggon), ответ facebook на (/ home/loginresult), и пользователь перенаправляется в/home/fbhome

Надеюсь, что это помогло

Извините за мой английский!

Смежные вопросы