2016-08-31 3 views
6

Я пытаюсь получить имя пользователя и адрес электронной почты пользователя из facebook. Я прочитал много информации на эту тему, и это мой последний код, который работает по какой-то причине только на моей facebook приложение учетной записи администратора:Получить электронную почту от пользователя facebook в asp net

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 

     /*Other external login options*/ 

     var FacebookOptions = new FacebookAuthenticationOptions() 
       { 
        AppId = "My App Id", 
        AppSecret = "My App Secret", 
        SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie, 
        BackchannelHttpHandler = new FacebookBackChannelHandler(), 
        UserInformationEndpoint = "https://graph.facebook.com/v2.7/me?fields=id,name,email" 
       }; 


    } 
} 
public class FacebookBackChannelHandler : HttpClientHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) 
    { 
     if (!request.RequestUri.AbsolutePath.Contains("/oauth")) 
     { 
      request.RequestUri = new Uri(request.RequestUri.AbsoluteUri.Replace("?access_token", "&access_token")); 
     } 

     return await base.SendAsync(request, cancellationToken); 
    } 
} 
public class AccountController : Controller 
{ 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     /*my sign in code that works on my facebook app admin account*/ 
    } 
}  

На каждый счет более я получаю loginInfo.Email равно null.

В developers.facebook.com у меня есть:

Approved Items

Когда кто-то нажимает на "Войти через Facebook" он получает это сообщение:

First facebook login page

Если я нажимаю «Прочтите информацию, которую Вы предоставили «я получаю:

Review the info you provide

Что мне не хватает? Почему это не работает?

ответ

5

Наконец нашел ответ! Все, что нужно сделать, это добавить Scope = { "email" } в FacebookOptions, и это решает проблему!

Мой код прямо сейчас:

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 

     /*Other external login options*/ 

     var FacebookOptions = new FacebookAuthenticationOptions() 
       { 
        AppId = "My App Id", 
        AppSecret = "My App Secret", 
        SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie, 
        BackchannelHttpHandler = new FacebookBackChannelHandler(), 
        Scope = { "email" }, 
        UserInformationEndpoint = "https://graph.facebook.com/v2.7/me?fields=id,name,email" 
       }; 
    } 
} 

Остальная часть кода остается неизменным. Я только добавил страницу ошибки для случая если эта проблема возвращает:

public class AccountController : Controller 
{ 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     if(loginInfo.Email == null) 
     { 
      return RedirectToAction("FacebookError", "Account"); 
     } 
     /*my sign in code*/ 
    } 
} 
1

Facebook предлагает людям полный контроль над разрешениями, которые они предоставляют приложению. Этот элемент управления выходит за пределы точки, в которой они видят диалог входа в систему. Они могут выбрать не предоставлять определенные разрешения во время процесса входа в систему. Они могут также аннулировать разрешения в своих настройках конфиденциальности Facebook в любое время. Приложения должны проверять правильность разрешений, прежде чем пытаться выполнить вызов API, где они необходимы. Например, проверка того, что действие электронной почты по-прежнему предоставляется, прежде чем пытаться опубликовать историю Open Graph. facebook предоставляет график API конечной точки для получения списка выданных разрешений:

GET /{user-id}/permissions 

Вызов должен быть сделан либо с доступом жетона пользователя или ваш маркер доступа приложения. Вызов будет возвращать JSON строку, содержащую имена разрешений, которые были предоставлены для приложений и их статус:

{ 
    "data": [ 
    { 
     "permission": "public_profile", 
     "status": "granted" 
    }, 
    { 
     "permission": "publish_actions", 
     "status": "granted" 
    }, 
    { 
     "permission": "user_friends", 
     "status": "declined" 
    } 
    ] 
} 

с помощью этого, вы можете обнаружить, возможно ли или не получать информацию, которую вы хотите. надеюсь это поможет.

ссылка: https://developers.facebook.com/docs/facebook-login/permissions/requesting-and-revoking

+0

Благодарим вас за ответ. Это помогло мне понять, что проблема определенно зависит от моего запроса, а не от прав пользователя. – levkaster

Смежные вопросы