Facebook C # SDK, проблемы с получением электронной почты пользователя - PullRequest
0 голосов
/ 03 ноября 2011

Я использую Facebook C # SDK и получил пример того, как настроить логин и получить некоторую информацию о пользователе для регистрации на моем веб-сайте. Тем не менее, я застрял в информации электронной почты. Это всегда ноль.

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

Мой код на частичной странице shtml выглядит так:

<div id="fb-root"></div>
<fb:login-button id="fblogin" onlogin="window.open('http://' + location.host + '/Facebook/LogOn', '_self')" perms='email'></fb:login-button>
<script>
    window.fbAsyncInit = function () {
        FB.init({
            appId: '@Facebook.FacebookApplication.Current.AppId',
            cookie: true,
            xfbml: true,
            oauth: true
        });

        function facebooklogin() {
            FB.login(function (response) {
                if (response.authResponse) {
                    // user authorized
                    //window.location.reload();
                    window.open("http://" + location.host + "/Facebook/LogOn", "_self")
                } else {
                    // user cancelled
                }
            }, { scope: '@ViewBag.ExtendedPermissions' });
        };

        $(function () {
            // make the button is only enabled after the facebook js sdk has been loaded.
            $('#fblogin').attr('disabled', false).click(facebooklogin);
        });
    };
    (function () {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
</script>

И мой код в контроллере Facebook:

public ActionResult LogOn()
{
    var fbWebContext = new FacebookWebContext(); // or FacebookWebContext.Current;

    if (fbWebContext.IsAuthorized())
    {
        var fb = new FacebookWebClient();
        dynamic me = fb.Get("me");

        //Creating new User with Facebook credentials
        var id = 0;
        var nickname = me.first_name;
        var password = "";
        var email = me.email;
        var picture = string.Format("http://graph.facebok.com/{0}/picture?type=large", me.id);
        var thumbnail = string.Format("http://graph.facebok.com/{0}/picture?type=normal", me.id);
        var fullName = me.name;
        var gender = "";
        if (me.gender == "male") gender = "Masculino";
        if (me.gender == "female") gender = "Feminino";
        var birthdate = Convert.ToDateTime(me.birthday);

        //Does the user already exist?
        if (DAUser.UserAlreadyExists(email))
        {
            ViewBag.Message = "O seu e-mail já foi cadastrado em nosso site. Por favor, cadastre outro e-mail.";
            return View("~/Views/Shared/Erro.cshtml");
        }
        else
        {
            id = DAUser.Create(nickname, email, password, "facebook");
        }

        //Updating created user information
        User user = db.User.Find(id);
        TryUpdateModel(user);
        user.Picture = picture;
        user.Thumbnail = thumbnail;
        user.Nickname = nickname;
        user.FullName = fullName;
        user.Gender = gender;
        if (!String.IsNullOrEmpty(birthdate))
        {
            user.Birthdate = Convert.ToDateTime(birthdate);
        }

        db.SaveChanges();
        Session["loginType"] = "Facebook";

        return RedirectToAction("Mural", "Home");
    }
    else
    {
        ViewBag.Message = "Não foi possível completar o seu login via Facebook.";
        return View("~/Views/Shared/Erro.cshtml");
    }
}

Если я поставлю эти строки, как показано в примере:

[FacebookAuthorize(Permissions = ExtendedPermissions)]

if (fbWebContext.IsAuthorized(ExtendedPermissions.Split(',')))

Мое приложение перестало работать.

У кого-нибудь есть решение? O другой пример кода, чтобы получить разрешение на запрос электронной почты и дня рождения?

Редактировать

Проблема была в этой строке:

}, { scope: '@ViewBag.ExtendedPermissions' });

В моем приложении должно быть:

}, { scope: 'email,user_birthday,user_hometown' }); //alter to get permission to access user data

Я не установил область действия (perms) для доступа к Facebook ... но теперь у меня есть другой вопрос.

Моя культура DateTime - дд / мм / гггг, а день рождения в Facebook настроен как ММ / дд / гггг, я пробовал это:

var birthdate = DateTime.Parse(me.birthday, CultureInfo.CreateSpecificCulture("pt-BR"));

Потому что моя культура на бразильском, но я все еще получаю ошибку DateTime:

String was not recognized as a valid DateTime.

Кто-нибудь знает, как это решить?

1 Ответ

1 голос
/ 04 ноября 2011

Эта строка делает все отлично работает с Facebook День рождения

var birthdate = DateTime.ParseExact(me.birthday, "MM/dd/yyyy", CultureInfo.InvariantCulture);
...