更新和解決方案:事實證明,問題是基於我用於我的開發URL的重定向,導致瀏覽器將我的頁面設置的所有Cookie都視爲第三方Cookie。 Facebook JS API會話cookie是而不是設置爲第三方cookie。Facebook API和Safari
我正在使用Facebook身份驗證處理ASP.NET應用程序。爲此,我使用Microsofts Facebook SDK與Facebook的Javascript API結合使用。一切正常,除了Safari。旅行默認設置是不接受第三方cookie,其結果是:
- 我可以通過Javascript訪問Facebook會話。
- 我無法訪問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>
這是我用來獲取用戶ID服務器端(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 Developer論壇和這裏,但都沒有找到解決方案。這實際上更像是一個Safari問題,而不是Facebook特定的問題。
我一直在考慮通過GET/POST /我自己的cookie將用戶標識發回服務器,但這是一個醜陋的解決方案和潛在的安全問題。
任何想法?
我不會說這是一個Safari問題,因爲任何人都可以設置他們的瀏覽器選擇不允許第三方cookie,它會打破功能(至少從你說的話)。您是否嘗試過更改其他瀏覽器中的第三方Cookie設置以查看事情是否仍然有效? – 2011-01-31 13:31:52
這是正確的,問題主要與第三方Cookie有關,而Safari則因其默認設置禁止第三方Cookie。 – Herber 2011-01-31 16:07:43