2014-09-22 3 views
9

के लिए पूछें मैंने फेसबुक प्रमाणीकरण के लिए कई पोस्ट देखी हैं, या तो वे पुराने हैं या सही तरीके से काम नहीं कर रहे हैं।एएसपी.नेट एमवीसी 5.1 सी # ओविन फेसबुक प्रमाणीकरण या लॉगिन जन्मदिन, पसंद, सार्वजनिक प्रोफ़ाइल, फोन नंबर

हालांकि आखिर में मैंने अपनी परियोजना में कुछ किया है जो काम करता है लेकिन पूरी तरह से नहीं। यहाँ कोड मैं कहाँ के लिए

 var facebookAuthenticationOptions = new FacebookAuthenticationOptions() 
     { 
      AppId = "...ID", 
      AppSecret = "...AppSecret", 
      AuthenticationType = "Facebook", 
      SignInAsAuthenticationType = "ExternalCookie", 
      //Provider = new FacebookAuthenticationProvider 
      //{ 
      // OnAuthenticated = async ctx => 
      // { 
      //  if (ctx.User["birthday"] != null) 
      //  { 
      //   ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth,ctx.User["birthday"].ToString())); 
      //  } 
      // } 
      //} 
     }; 
     facebookAuthenticationOptions.Scope.Add("user_birthday"); 
     //facebookAuthenticationOptions.Scope.Add("first_name"); 
     //facebookAuthenticationOptions.Scope.Add("last_name"); 
     //page goes blank if ask for first_name,last_name , if comment out works 
     //but doesn give date of birth or likes or other things. 
     facebookAuthenticationOptions.Scope.Add("publish_stream"); 
     facebookAuthenticationOptions.Scope.Add("user_likes"); 
     facebookAuthenticationOptions.Scope.Add("friends_likes"); 
     facebookAuthenticationOptions.Scope.Add("read_stream"); 
     facebookAuthenticationOptions.Scope.Add("email"); 

     app.UseFacebookAuthentication(facebookAuthenticationOptions); 

What I get from the return result.

पूछना किसी को भी कृपया मेरी मदद कर सकते कारण है कि मैं friends_like, जन्मदिन, user_likes नहीं मिल रहा है और इतने पर है।

इसके अतिरिक्त, जानकारी पुनर्प्राप्ति के लिए उन स्ट्रिंग मानों (यानी "user_birthday", "first_name") कैसे प्राप्त करें, जैसे कि मुझे कैसे पता चलेगा कि "user_birthday" जन्मदिन की तारीख लौटाता है (मुझे इसे खोज से मिला है) वहाँ कोई सूची है जिसमें इस स्ट्रिंग नाम हैं (यानी "user_birthday", "first_name")?

यदि मैं Google प्रमाणीकरण का उपयोग करता हूं तो क्या फ़ोन नंबर या पहला नाम, अंतिम नाम प्राप्त करना संभव है?

उत्तर

10

यह हल, संदर्भ वहाँ: https://developers.facebook.com/docs/facebook-login/permissions/v2.1#reference

  var facebookAuthenticationOptions = new FacebookAuthenticationOptions() { 
      AppId = ".....", 
      AppSecret = ".....", 
      AuthenticationType = "Facebook", 
      SignInAsAuthenticationType = "ExternalCookie", 
      Provider = new FacebookAuthenticationProvider { 
       OnAuthenticated = async ctx => { 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.Country, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.Gender, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.MobilePhone, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.OtherPhone, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.HomePhone, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.StateOrProvince, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.Email, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.Country, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.Actor, ctx.User["birthday"].ToString())); 
        ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth, ctx.User["birthday"].ToString())); 
       } 
      } 
     }; 
     facebookAuthenticationOptions.Scope.Add("user_birthday"); 
     //facebookAuthenticationOptions.Scope.Add("first_name"); 
     //facebookAuthenticationOptions.Scope.Add("last_name"); 
     facebookAuthenticationOptions.Scope.Add("publish_stream"); 
     facebookAuthenticationOptions.Scope.Add("user_likes"); 
     facebookAuthenticationOptions.Scope.Add("friends_likes"); 
     facebookAuthenticationOptions.Scope.Add("user_about_me"); 
     facebookAuthenticationOptions.Scope.Add("user_friends"); 
     facebookAuthenticationOptions.Scope.Add("user_actions.news"); 
     facebookAuthenticationOptions.Scope.Add("user_actions.video"); 
     facebookAuthenticationOptions.Scope.Add("user_education_history"); 
     facebookAuthenticationOptions.Scope.Add("manage_pages"); 
     facebookAuthenticationOptions.Scope.Add("user_interests"); 
     facebookAuthenticationOptions.Scope.Add("user_location"); 
     facebookAuthenticationOptions.Scope.Add("user_photos"); 
     facebookAuthenticationOptions.Scope.Add("user_relationships"); 
     facebookAuthenticationOptions.Scope.Add("user_relationship_details"); 
     facebookAuthenticationOptions.Scope.Add("user_status"); 
     facebookAuthenticationOptions.Scope.Add("user_tagged_places"); 
     facebookAuthenticationOptions.Scope.Add("user_videos"); 
     facebookAuthenticationOptions.Scope.Add("user_website"); 
     facebookAuthenticationOptions.Scope.Add("read_friendlists"); 
     facebookAuthenticationOptions.Scope.Add("read_stream"); 
     facebookAuthenticationOptions.Scope.Add("email"); 
     app.UseFacebookAuthentication(facebookAuthenticationOptions); 

ctx मिला सभी जानकारी .. बस इसे माध्यम से जाना है।

अभी भी Google को पहले, अंतिम नाम और फोन नंबर + जन्म तिथि कैसे प्राप्त करें, इस बारे में जानकारी नहीं है। या जीमेल खाते से उपयोगकर्ता संपर्कों तक कैसे पहुंचे।

+0

धन्यवाद। मैं इस दिन पसीना रहा हूं। – bowerm

+0

बहुत बहुत धन्यवाद ~! इससे मेरा काम बनता है! केवल एक मुद्दा यह है कि निर्मित दावा ऑब्जेक्ट्स मेरे डेटाबेस में सहेजे नहीं जाते हैं ..... इसे काम करने के लिए मुझे और क्या करना चाहिए? – Franva

+1

@ फ्रांवा आपको इसे नियंत्रक पक्ष से संभालना है, आपको इन गुणों का उपयोग करना होगा और उन्हें डीबी में स्टोर करना होगा। –

7

तुम बस context.User के माध्यम से लूप सभी दावों

var facebookAuthOptions = new FacebookAuthenticationOptions(); 
     facebookAuthOptions.AppId = "..."; //Enter your AppId 
     facebookAuthOptions.AppSecret = "..."; //Enter your AppSecret 
facebookAuthOptions.Provider = new FacebookAuthenticationProvider() 
    { 
     OnAuthenticated = async context => 
      { 
       context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken)); 
       foreach (var claim in context.User) 
       { 
        var claimType = string.Format("urn:facebook:{0}", claim.Key); 
        string claimValue = claim.Value.ToString(); 
        if (!context.Identity.HasClaim(claimType, claimValue)) 
         context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook")); 
       } 
      } 
    }; 

उसी Google

var googleAuthOptions = new GoogleOAuth2AuthenticationOptions(); 
     googleAuthOptions.ClientId = "..."; //Enter your ClientId 
     googleAuthOptions.ClientSecret = "..."; //Enter your ClientSecret 
googleAuthOptions.Provider = new GoogleOAuth2AuthenticationProvider() 
    { 
     OnAuthenticated = async context => 
     { 
      context.Identity.AddClaim(new System.Security.Claims.Claim("GoogleAccessToken", context.AccessToken)); 
      foreach (var claim in context.User) 
      { 
       var claimType = string.Format("urn:google:{0}", claim.Key); 
       string claimValue = claim.Value.ToString(); 
       if (!context.Identity.HasClaim(claimType, claimValue)) 
        context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Google")); 
      } 
     } 
    }; 

और मैं उपयोगकर्ता की गोपनीयता सेटिंग और आपके आवेदन अनुमतियाँ नियंत्रण जो दावा करता है लगता है के लिए चला जाता है पाने के लिए कर सकते हैं आप प्राप्त कर सकते हैं।

संबंधित मुद्दे