2017-10-03 3 views
0

次のコードを使用してFacebookでログインしようとしていますが、ユーザーの電子メールアドレスを取得できません。私は何かを欠いている?FacebookClientでユーザーの電子メールを取得できません

ここFacebookOAuthResultを返しasp.net MVCアクションメソッドを要求している。

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

と、次のアクションメソッドは、ユーザーの詳細を取得しようとしますが、ユーザーの電子メールアドレス

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

の取得に失敗した応答では、我々はFBによって共有されるが、電子メールでは共有されない他のパラメータを見ることができる。ここにデバッグ出力イメージがあります: Debug output

+0

をあなたが使用しているAPIや言語の詳細は明らかです。また、エラーなしで診断する方法はありません。あなたが他人にこれを理解させたいなら、あなたはそれらに資源を与える必要があります。正しい字下げも標準と見なされます。 – jStaff

+0

こんにちはJstaff ..私はFacebook API 2.4でC#を使用しています。デバッグ応答イメージも添付されています。 –

+0

恐ろしいほうがいいよ – jStaff

答えて

0

あなたのコードは正しいようです。あなたがFacebookのhttp://developers.facebook.com/docs/authentication/permissions/から

例として、適切なアクセス許可を要求していることを確認してください:https://gist.github.com/ntotten/4341111

+0

ありがとうございました.. Facebookの開発者ポータルでFacebookから適切な権限を設定できるページを見つけることができません。上記のリンクは、ユーザーからすべての詳細を要求できるものの、アプリに対して設定する方法を示しています。 –

+0

この例を見てみましょう:https://gist.github.com/ntotten/4341111#file-accountcontroller2-cs 「scope = "email"」の追加に注意してください – AytanLeibowitz

+0

あなたのコードは "get "情報は、しかし、Facebookのユーザーが最初に許可を与えなければならない。 – AytanLeibowitz

関連する問題