2012-03-27 17 views
1

Nur mit dem Aufbau einer App mit der v6 der Facebook C# sdk und steckte auf den Login-Prozess für Facebook. Ich habe den folgenden Code auf meiner Seite:Haben Probleme bei der Anmeldung in 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()); 

Wenn ich auf die Seite gehe, passiert die Weiterleitung zum Anmelden nie. Was mache ich falsch?

+0

umleiten zu fbLoginUrl.AbsoluteUri – prabir

+0

Danke @ Prabir wird dies später versuchen. Den ganzen Tag laufen. – Jess

Antwort

1

Mit MVC 3 (siehe das veröffentlichte Beispiel) mache ich eine Ansicht, wo die Anmeldung beginnt. Der Controller ist:

 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); 
    } 

wo returnUrl ist der angeschlossene Anzeigebereich in meiner app (/ home/fbhome) und RedirectUri ist die Ansicht (loginresult), die den zweiten Schritt behandelt:

 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 Soweit ich weiß, gibt der Benutzer die Site ein (/ home/index), dann klickt man auf einen Link, um sich zu verbinden (/ home/loggon), facebook answer (/ home/loginresult) und der Benutzer wird nach/home/umgeleitet fbhome

Hoffe das half

Entschuldigung für mein Englisch!

Verwandte Themen