Обновление и решение: Оказывается, проблема была в том, что я использовал перенаправление, которое я использовал для моего 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, но это ужасное решение и потенциальная проблема безопасности.
Есть идеи?