2011-09-11 2 views
0

Cette question est, je pense, similaire to my previous one. En utilisant la dernière C# Facebook SDK sur .NET 4 je reçois une exception avec le message "ClientID nécessaire" avec le code suivant sur la dernière ligne:Facebook C# SDK OAuth Exception "ClientID requis"

var app = new DefaultFacebookApplication(); 
    app.AppId = "appId"; 
    app.AppSecret = "secret"; 
    var fb = new FacebookWebContext(app); 
    fb.IsAuthenticated(); 

ID App et secret sont correctement réglés. La trace de la pile de l'exception est la suivante: System.Exception a eu lieu

Message=ClientID required. Source=Facebook StackTrace: 
     at Facebook.FacebookOAuthClient.BuildExchangeCodeForAccessTokenParameters(IDictionary`2 parameters, String& name, String& path) 
     at Facebook.FacebookOAuthClient.ExchangeCodeForAccessToken(String code, IDictionary`2 parameters) 
     at Facebook.FacebookSession.get_AccessToken() 
     at Facebook.FacebookSession.get_Expires() 
     at Facebook.Web.FacebookWebContext.IsAuthenticated() 
     at Piedone.FacebookTest.Authorize() InnerException: 

Du côté client J'utilise le SDK JS, initialisé comme suit:

  FB.init({ 
       appId: appId, 
       status: true, // check login status 
       cookie: true, // enable cookies to allow the server to access the session 
       xfbml: true, // parse XFBML 
       oauth: true // enable OAuth 2.0 
      }); 

Les utilisateurs se correctement connecté avec la méthode de connexion JS(), comme l'alerte dans la pièce suivante de code est exécuté:

 FB.login(function (response) { 
      if (response.authResponse) { 
       alert("logged in"); 
      } else { 
       alert('User cancelled login or did not fully authorize.'); 
      } 
     }, { scope: scope }); 

dans les paramètres de l'application sur Facebook la fois l'utilisation « Forces de connexion secret pour l'appel OAuth et pour auth.login "et" Encrypted Access Token "sont activés. Autant que je sache tout cela devrait permettre l'utilisation de l'authentification OAuth 2. Quelqu'un a une idée de ce que je fais mal? Il ne peut vraiment y avoir aucune erreur dans ces quelques lignes de code ...

Merci d'avance pour toute aide!

Edit: La propriété AccessToken de FacebookWebContext lancers francs la même erreur et HttpContext.CurrentNotification fait:

CurrentNotification '(_facebookWebContextCache.HttpContext).CurrentNotification' threw an exception of type 'System.PlatformNotSupportedException' System.Web.RequestNotification {System.PlatformNotSupportedException} 
This operation requires IIS integrated pipeline mode. 

Depuis que je dois exécuter le programme à partir de Visual Studio avec son serveur de développement (comme je suis actuellement développement de l'application) il n'y a aucun moyen de faire quelque chose à propos de cette dernière exception, je suppose. En fait, j'ai également essayé avec IIS express de Webmatrix, mais le problème persiste. Il est aussi intéressant que dans le FacebookWebContext les réglages (identifiant d'application, le secret) sont correctement réglés ainsi, l'ID utilisateur et la demande signée est là aussi ...

Edit 2: Je reçois aussi même erreur lors de l'utilisation de la source SDK. Il semble que AccessToken et dans la session la propriété Expires lèvent l'exception. Je ne sais pas si cela est lié au problème httpcontext ci-dessus.

Répondre

0

Enfin, j'ai réussi à résoudre le problème, mais il s'agit probablement d'un bogue dans le SDK.

La cause Le problème est que le FacebookApplication.Current est vide, car il ne soit pas rempli de données définies dans le cteur de FacebookWebContext. Cela conduit au problème du jeton d'accès: dans FacebookSession.AccessToken sur la ligne 119 FacebookOAuthClient est instancié avec FacebookApplication.Current, qui est bien sûr pratiquement vide. Donc FacebookOAuthClient lève l'exception car elle n'obtient pas les paramètres de l'application.

La solution La solution consiste à définir simplement explicitement la FacebookApplication actuelle ainsi que l'instanciation de FacebookWebContext:

var app = new DefaultFacebookApplication(); 
app.AppId = "appId"; 
app.AppSecret = "secret"; 
var fb = new FacebookWebContext(app); 
FacebookApplication.SetApplication(app); // Note this is the new line 
+0

a également ouvert un numéro: http://facebooksdk.codeplex.com/workitem/5902 – Piedone

+0

Prabir Shrestha déjà olled une solution rapide avec le dernier enregistrement: http://facebooksdk.codeplex.com/SourceControl/changeset/changes/7ce3c54e1aea – Piedone

2

Une autre solution est d'ajouter des paramètres de facebook pour vous web ou une application congfig

<facebookSettings appId="appid" appSecret="secret" /> 

après la création de la classe d'authentification

var oauth = new FacebookOAuthClient(FacebookApplication.Current); 

Et wil fonctionne aussi bien

+0

Merci, mais j'avais besoin de définir les données de l'application à partir du code. BTW le problème est maintenant obsolète que le problème a été résolu dans le SDK. – Piedone

+0

Cette solution est bonne si vous travaillez avec une seule application facebook. –