2017-05-23 2 views
-2

Je souhaite obtenir l'accès à l'utilisateur.Impossible d'obtenir le code de réponse

Lorsque l'utilisateur clique sur le bouton enregistrer/Login:

  $.ajax({ 
      url: 'Register', 
      type: 'GET', 
      data: { m:true }, 
      contentType: 'application/json; charset=utf-8', 
      success: function (response) { 
       if (response.success) { 
       } else { 
       } 
      }, 
      error: function() { 
      } 
      }); 

Ma méthode de registre:

  Uri uri = new Uri(FacebookHelpers.GetFacebookLoginURL()); 
      var res = await FacebookHelpers.FacebookRequest<object>(uri).ConfigureAwait(false); 

Dans res, je veux obtenir le résultat de FacebookRequest pour obtenir le code, qu'Exchange ce code pour un jeton d'accès.

fonction Mon GetFacebookLoginUrl:

  var redirectUri = "https://www.facebook.com/connect/login_success.html"; 
      var uri = GetUri("https://www.facebook.com/dialog/oauth", 
       Tuple.Create("client_id", FacebookAppId), 
       Tuple.Create("redirect_uri", redirectUri), 
       Tuple.Create("response_type", "code"), 
       Tuple.Create("scope", "public_profile,email"), 
       Tuple.Create("state", Convert.ToString(new Random().Next(9999))) 
       ); 

Dans ma fonction FacebookRequest:

 public static async Task<T> FacebookRequest<T>(Uri uri) 
     { 
      string json; 
      using (HttpClient client = new HttpClient()) 
      { 
       json = await client.GetStringAsync(uri).ConfigureAwait(false); 
      } 

      try 
      { 
       var result = JsonConvert.DeserializeObject<T>(json); 
       return result; 
      } 
      catch (JsonException ex) 
      { 
       throw new ArgumentException("Unable to deserialize the Facebook response.", ex); 
      } 
     } 

Le problème apparaît lorsque la fonction FacebookRequest tente d'obtenir le code d'URL fournie.

Caractère inattendu rencontré lors de l'analyse: <. Chemin d'accès '', ligne 0, position 0.

La réponse JSON contient la même page à partir de laquelle la méthode a été appelée. FacebookRequest ne renvoie pas de code, il renvoie à la place du succès.

Une idée?

Le but: Je veux obtenir l'utilisateur de ma base de données et lier son compte avec mon bot. Ou si l'utilisateur n'existe pas, commencez par vous inscrire et par créer un lien avec le bot.

+0

Avez-vous vérifié ce que contient réellement votre variable 'json' ...? – CBroe

+0

J'ai édité ma question. Il contient tout le code html d'où la méthode est appelée ... –

+1

Vous ne pouvez pas charger la boîte de dialogue de connexion Facebook en arrière-plan - vous devez rediriger l'utilisateur vers cette adresse. (Pour la raison absolument évidente que les utilisateurs doivent être en mesure de vérifier via la barre d'adresse qu'ils entrent effectivement leurs informations d'identification sur Facebook, et non un site d'hameçonnage.) – CBroe

Répondre

1

Vous ne pouvez pas charger la boîte de dialogue de connexion Facebook en arrière-plan - vous devez rediriger l'utilisateur vers cette adresse. Il doit être appelé dans le navigateur de l'utilisateur; Si vous essayez de le demander en arrière-plan, cela ne fonctionnera pas. Pour savoir si vous obtenez un code ou un jeton d'accès: Vous pouvez indiquer que vous voulez qu'un jeton d'accès soit renvoyé directement, mais dans ce cas, le jeton est transmis dans la partie fragment de votre URI de redirection, ce qui signifie que vous pouvez seulement l'obtenir à partir de là en utilisant le code côté client. Ce n'est pas une option ici, je suppose. (Si vous avez besoin de plus d'informations à ce sujet, le paramètre response_type et les valeurs possibles sont décrits ici, https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow#logindialog)

+0

Merci encore une fois :))) –