Facebook c # sdk получает электронную почту пользователей - PullRequest
3 голосов
/ 11 апреля 2011

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

Код для входа в систему является стандартным:

public ActionResult Login(string returnUrl)
    {
        var oAuthClient = new FacebookOAuthClient();
        oAuthClient.AppId = AppSettings.GetConfigurationString("appId");
        oAuthClient.RedirectUri = new Uri(AppSettings.GetConfigurationString("redirectUrl"));
        var loginUri = oAuthClient.GetLoginUrl(new Dictionary<string, object> { { "state", returnUrl } });
        return Redirect(loginUri.AbsoluteUri);
    }

Как мне добавить запрос на разрешение доступа в этом? Или я делаю это по-другому?

Ответы [ 2 ]

10 голосов
/ 11 апреля 2011

Вам необходимо использовать разрешение email (полный список здесь: http://developers.facebook.com/docs/authentication/permissions/)

Чтобы добавить разрешения для авторизации, добавьте разделенный запятыми список к &scope=, например ::

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream


Обновление: Как вы отметили, параметры передаются методу GetLoginUrl(), хотя на форуме codeplex они также использовали ExchangeCodeForAccessToken(), на который вы, возможно, захотите взглянуть.

Несколько примеров использования C # SDK:

http://blog.prabir.me/post/Facebook-CSharp-SDK-Writing-your-first-Facebook-Application.aspx

Facebook .NET SDK: как пройти аутентификацию с ASP.NET MVC 2

http://facebooksdk.codeplex.com/discussions/244568

5 голосов
/ 11 апреля 2011

Snoop на код SDK, и я пришел с:

 public ActionResult Login(string returnUrl)
    {
        var oAuthClient = new FacebookOAuthClient();
        oAuthClient.AppId = AppSettings.GetConfigurationString("appId");
        oAuthClient.RedirectUri = new Uri(AppSettings.GetConfigurationString("redirectUrl"));

        var parameters = new Dictionary<string, object>();
        parameters["state"] = returnUrl;
        parameters["scope"] = "email";

        var loginUri = oAuthClient.GetLoginUrl(parameters);
        return Redirect(loginUri.AbsoluteUri);
    }

еще не проверял, и миссис кричит на меня за работу допоздна, так что придется тестировать томоз:)

...