2013-12-09 7 views
1

내 앱의 사용자 정보를 반환하기 위해 Facebook Graph API를 사용하고 있습니다. 지금까지 확장 된 속성으로 이메일을 가져올 필요가 있었으며 결코 문제가 없었습니다. 그러나 이제는 사용자 생일을 가져야하지만 예상대로 작동하지 않습니다. 널 값을 얻고 있습니다. 여기Facebook 그래프 API가 속성을 반환하지 않습니다. user_birthday

은 내가 얻을 내가 응답을 역 직렬화 할 때

using DotNetOpenAuth.OpenId; 
using DotNetOpenAuth.OAuth2; 

namespace Contoso.Web.Mvc.Controls.Authentication.IdentityProviders 
{ 
    public class FacebookIdentityProvider : IdentityProvider 
    {  

     public override ActionResult Authenticate(Func<LoginParameters, ActionResult> CallbackFunction) 
     { 
      var authorization = fbClient.ProcessUserAuthorization(); 
      var urlHelper = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext); 

      if (authorization == null && String.IsNullOrWhiteSpace(Parameters.AccessToken)) 
      { 
       //Kick off authorization request 
       fbClient.RequestUserAuthorization(scope: new string[] { "email", "user_birthday"}); 
      } 
      else 
      { 
       if(authorization != null) 
        Parameters.AccessToken = authorization.AccessToken; 

       var request = WebRequest.Create("https://graph.facebook.com/me?access_token=" + Uri.EscapeDataString(Parameters.AccessToken)); 

       using (var response = request.GetResponse()) 
       { 
        using (var responseStream = response.GetResponseStream()) 
        { 
         var graph = FacebookGraph.Deserialize(responseStream); 
         var user = GetUser(graph); 
         var requiresExtraInformation = false; 
         DoFormAuthenticationAndCreateUserIfNeeded(user, out requiresExtraInformation); 

         if (requiresExtraInformation) 
         { 
          return RedirectToExtraInformationPage(user); 
         } 
         return CallbackFunction(Parameters);        
        } 
       } 
      } 

      return new RedirectResult(urlHelper.Action("Index")); 
     } 
    } 

    [DataContract] 
    public class FacebookGraph 
    { 
     private static DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(FacebookGraph)); 

     [DataMember(Name = "id")] 
     public long Id { get; set; } 

     [DataMember(Name = "name")] 
     public string Name { get; set; } 

     [DataMember(Name = "first_name")] 
     public string FirstName { get; set; } 

     [DataMember(Name = "last_name")] 
     public string LastName { get; set; } 

     [DataMember(Name = "email")] 
     public string Email { get; set; } 

     [DataMember(Name = "gender")] 
     public string Gender { get; set; } 

     [DataMember(Name = "user_birthday")] 
     public string UserBirthday { get; set; } 

     public static FacebookGraph Deserialize(string json) 
     { 
      if (string.IsNullOrEmpty(json)) 
      { 
       throw new ArgumentNullException("jsonStream"); 
      } 

      return Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(json))); 
     } 

     public static FacebookGraph Deserialize(Stream jsonStream) 
     { 
      if (jsonStream == null) 
      { 
       throw new ArgumentNullException("jsonStream"); 
      } 
      return (FacebookGraph)jsonSerializer.ReadObject(jsonStream); 
     } 
    } 
} 

내가 페이스 북에서 얻는 정보를 I는 사용자의 생일을 제외하고 필요로하는 모든 정보를 반환하는 데 사용하는 클래스의 일부이다 (이 널 (null)로 나타납니다) . 나는 체크하고 나의 페이스 북 프로필에는 사용자 생일이있다.

+0

테스트 할 사용자에 대한 정보를 공유 했습니까? –

답변

0

좋아, 나는 마침내 문제를 발견했다. 그리고 그것은 어리석은 약간이었다. 그러나 누군가 다른 사람이 이것에 비틀 거린다면 나는 여기에서 그것을 떠날 것이다.

문제는 내가이

가 있어야 내가 "user_birthday"올바른 범위를 요청에도 불구하고, 그래프 개체의 속성은 그냥 "생일"이라는 것을, 그래서 대신

[DataMember(Name = "user_birthday")] 
public string UserBirthday { get; set; } 

을 갖는

[DataMember(Name = "birthday")] 
public string UserBirthday { get; set; } 

그게 전부입니다. 지금 일하고있어!

관련 문제