Facebook API и Safari - PullRequest
       16

Facebook API и Safari

3 голосов
/ 31 января 2011

Обновление и решение: Оказывается, проблема была в том, что я использовал перенаправление, которое я использовал для моего URL-адреса разработчика, в результате чего браузеры воспринимали все файлы cookie, установленные моей страницей, как файлы cookie сторонних производителей. Файл cookie сеанса API JS Facebook не установлен как сторонний файл cookie.

Я работаю над приложением ASP.NET с аутентификацией Facebook. Для этого я использую Microsoft SDK Facebook в сочетании с Javascript API Facebook. Все работает, кроме Safari. Настройка Safaris по умолчанию - не принимать сторонние файлы cookie, в результате чего:

  • Я могу получить доступ к сеансу Facebook через Javascript.
  • Я не могу получить доступ к серверу сеанса Facebook на стороне сервера, поскольку cookie никогда не устанавливается и не отправляется из Safari.

Это мой код на стороне клиента, связанный с Facebook (JS):

<div id="fb-root"></div>    
<fb:login-button>Login with Facebook</fb:login-button>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
    FB.init({ appId: 'myAppId', status: true, cookie: true, xfbml: true });
    FB.Event.subscribe('auth.login', function (response) {
       if (response.session) {
           window.location.reload(); //Results in eternal reload of page
       }
    });
</script>

Это мой код для получения идентификатора пользователя на стороне сервера (C #):

public string FacebookUserID
{
    get
    {
        FacebookSettings settings = new FacebookSettings();
        settings.AppId = "myAppId";
        settings.AppSecret = "myAppSecret";
        FacebookApp app = new FacebookApp(settings);
        Authorizer auth = new Authorizer(app);

        return (auth.IsAuthorized()) ? app.Session.UserId : null;
    }
}

Полагаю, я не единственный, у кого такая же проблема, но я искал и форум разработчиков Facebook, и здесь, и не нашел решения. Это действительно больше проблема Safari, чем проблема, связанная с Facebook.

Я думал о том, чтобы отправить идентификатор пользователя обратно на сервер через GET / POST / мой собственный файл cookie, но это ужасное решение и потенциальная проблема безопасности.

Есть идеи?

1 Ответ

3 голосов
/ 31 января 2011

Оказывается, проблема заключалась в перенаправлении, которое я использовал для моего URL-адреса разработчика, в результате чего браузеры воспринимали все файлы cookie, заданные моей страницей, как файлы cookie сторонних производителей. Файл cookie сеанса Facebook JS API не является файлом cookie стороннего производителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...