ASP.NET MVC 5.1 C# OWIN facebook authentication or login ask for birthday, likes, public profile, phone number

Md. Alim Ul Karim picture Md. Alim Ul Karim · Sep 22, 2014 · Viewed 9.1k times · Source

I have seen many posts for facebook authentication , either those are old or not working correctly as it should be.

However finally I have made something in my project that works but not fully. Here is code where I ask for

        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.

Can anyone please help me why I am not getting friends_like,birthday, user_likes and so on.

In addition, how to get those string values(ie. "user_birthday","first_name") for information retrieval, like how would I know that "user_birthday" returns date of birthday(I got it from searching) , is there any list which have this string names(ie. "user_birthday","first_name") ?

If I use google authentication is it possible to get phone number or first name,last name?

Answer

Md. Alim Ul Karim picture Md. Alim Ul Karim · Sep 22, 2014

Solved it, References there : 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 got all the information.. Just have to go through it.

Still don't have information on how to get google first,last name and phone number + date of birth. Or how to access user contacts from gmail account.