Вопрос

I am another MVC dummy and trying to work out external logins for my upcoming projects. I am using the default MVC template for that comes with VS2013. After following the exact steps as told in OWIN tutorial . The problem I have is that when a user is logging in from Google or Facebook or any other external account, he expects not to put his information again. The code I found for enabling logging in through Facebook and Google, it just fetches the username which is useless. I mean i know it would work still then but what if I want to get the basic information which facebook had already told the user I would be accessing. This is what I get in reply after successful login. Is there a way to get the basic information using this.

Object Returned

ADDITION: I also included Facebook package from Nuget and was able to get some info through the following code. NOW THE PROBLEM comes down to, how to I ask the user for more than just normal info eg posting on his behalf, getting posts etc using this OWIN's library.

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
        if (loginInfo.Login.LoginProvider.ToLower() == "facebook")
        {
            var accessToken = "something";
            var client = new FacebookClient(accessToken);
            dynamic me = client.Get(loginInfo.DefaultUserName);
        }

Facebook Client Image

Это было полезно?

Решение

You can do it by adding Scopes when requesting the initial login. There is an excellent sample is explained here

Bit of code:

List<string> scope = newList<string>() { "email", "user_about_me", "user_hometown", "friends_about_me", "friends_photos" };
 var x = newFacebookAuthenticationOptions();
 x.Scope.Add("email");
 x.Scope.Add("friends_about_me");
 x.Scope.Add("friends_photos");
 x.AppId = "636919159681109";
 x.AppSecret = "f3c16511fe95e854cf5885c10f83f26f";
 x.Provider = newFacebookAuthenticationProvider()
{
    OnAuthenticated = async context =>
    {
         //Get the access token from FB and store it in the database and
        //use FacebookC# SDK to get more information about the user
        context.Identity.AddClaim(
        new System.Security.Claims.Claim("FacebookAccessToken",
                                             context.AccessToken));
    }
};
 x.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
 app.UseFacebookAuthentication(x);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top