2017-10-03 2 views
0

Ich versuche, mich mit Facebook mit dem folgenden Code anzumelden, aber die E-Mail-Adresse des Benutzers kann nicht abgerufen werden. Ich vermisse etwas?Benutzer-E-Mail mit FacebookClient kann nicht empfangen werden

Hier Anfrage asp.net Mvc Aktionsmethode, die FacebookOAuthResult zurückgibt:

public ActionResult FacebookStartLogin(string returnUrl) 
    { 
     if (!this.Config.AuthenticationProviders.Facebook.IsDefined) 
     { 
      return ResultHelper.ForbiddenResult(this); 
     } 
     var oAuthClient = new FacebookOAuthClient(); 
     oAuthClient.AppId = this.Config.AuthenticationProviders.Facebook.ApiKey; 
     oAuthClient.RedirectUri = new Uri(Request.Url, Url.Action("FacebookFinishLogin", "Authentication")); 
     var loginUri = oAuthClient.GetLoginUrl(new Dictionary<string, object>() { { "state", Session.SessionToken } }); 

     Session.NextUrl = returnUrl; 

     return new RedirectResult(loginUri.AbsoluteUri); 
    } 

und nach der Maßnahme Methode versucht, Benutzerdaten abzurufen, aber nicht Adresse Benutzer E-Mail

public ActionResult FacebookFinishLogin(string code, string state) 
    { 
     if (!this.Config.AuthenticationProviders.Facebook.IsDefined) 
     { 
      return ResultHelper.ForbiddenResult(this); 
     } 
     FacebookOAuthResult oauthResult; 
     if (state == Session.SessionToken && FacebookOAuthResult.TryParse(Request.Url, out oauthResult)) 
     { 
      if (oauthResult.IsSuccess) 
      { 
       FacebookClient fbClient = new FacebookClient(); 
       dynamic result = fbClient.Post("oauth/access_token", new 
       { 
        client_id = this.Config.AuthenticationProviders.Facebook.ApiKey, 
        client_secret = this.Config.AuthenticationProviders.Facebook.SecretKey, 
        redirect_uri = new Uri(Request.Url, Url.Action("FacebookFinishLogin", "Authentication")), 
        code = code 
       }); 

       fbClient.AccessToken = result.access_token; 

       dynamic facebookUser = fbClient.Get("me?fields=id,name,first_name,last_name,about,link,birthday,timezone,email"); 

       User user = _service.GetByProviderId(AuthenticationProvider.Facebook, facebookUser.id); 
       if (user == null) 
       { 
        //Its a new user for the application 
        user = SecurityHelper.CreateUser(facebookUser); 
        user = _service.Add(user, AuthenticationProvider.Facebook, facebookUser.id); 
       } 

       //Log the user in 
       Session.User = new UserState(user, AuthenticationProvider.Facebook); 

       if (!User.MobileNoVerified) 
        return Redirect(Url.Action("VerifyMobile", "Users")); 

       return Redirect(Session.NextUrl); 
      } 
      return ResultHelper.ForbiddenResult(this); 
     } 
     else 
      return ResultHelper.ForbiddenResult(this); 
    } 

Als Antwort bekommen wir kann andere vom FB geteilte Parameter sehen, aber keine E-Mail. Hier ist Debug-Ausgabe Bild: Debug output

+0

Sie sollten mehr klar, was API und Sprache Sie verwenden. Außerdem gibt es keine Möglichkeit, ohne Fehler zu diagnostizieren. Wenn Sie möchten, dass andere dies herausfinden, müssen Sie ihnen Ressourcen geben. Die korrekte Einrückung gilt ebenfalls als Standard. – jStaff

+0

Hallo Jstaff .. Ich benutze C# mit Facebook API 2.4. hat auch das Debug-Response-Image angehängt. –

+0

Awesome sieht besser – jStaff

Antwort

0

Ihr Code scheint korrekt zu sein. Stellen Sie sicher, dass Sie die richtigen Berechtigungen von Facebook fordern http://developers.facebook.com/docs/authentication/permissions/

Beispiele: https://gist.github.com/ntotten/4341111

+0

Danke Buddy .. aber ich bin nicht in der Lage, Seite auf Facebook Entwickler-Portal zu finden, wo ich die richtigen Berechtigungen von Facebook einstellen kann. Der obige Link bietet die Möglichkeit, alle Details vom Benutzer anzufordern, aber wie man sie für eine App einstellt. –

+0

Schauen Sie sich dieses Beispiel an: https://gist.github.com/ntotten/4341111#file-accountcontroller2-cs Beachten Sie das Hinzufügen der 'scope =" email "' – AytanLeibowitz

+0

Ihr Code ist vorhanden, "zu erhalten." "Die Informationen, aber der Facebook-Benutzer muss Ihnen zuerst die Erlaubnis erteilen. – AytanLeibowitz

Verwandte Themen