2012-04-06 253 views
0

我正在使用JS-SDK,我的用戶已經授權使用我的Facebook應用程序。如何授予用戶權限

現在我的開放圖形動作被批准並開始發佈。

我的用戶正在進入我的網站,JS SDK會自動以FB.getLoginStatus的身份登錄狀態,並在用戶登錄Facebook時進行操作。

facebook要求「publish_actions」權限在Facebook上發佈操作。因此,我將範圍attiribute添加到了我的登錄按鈕,並帶有「publish_actions」值,並且在您單擊它時工作正常。

但有一個問題:我直到今天還沒有從我的用戶那裏得到這個權限。所以,如果用戶未自動接受JS SDK的此權限,我想打開一個窗口接受此權限。因爲系統沒有這樣做。

方案(詳細明確的想法):

1)用戶上個星期來到我的網站,並登錄按鈕授權。

2)我在我的網站上添加了Open Graph的東西,並且昨天將範圍attiribute添加到我的登錄按鈕。

3)用戶登錄到Facebook。之後,今天來到我的網站。 JS SDK自動授權不會給任何錯誤,「這個網站上有新的權限」或等等...

所以,我想顯示新的auth對話框給這個用戶。

+0

根據我的經驗,這應該會自動發生。您可以通過取消您對用戶帳戶的權限並登錄到您的應用程序來測試此功能。您應該被提示接受新的權限。 – 2012-04-06 22:11:06

+0

@AlexRockwell正在工作,但請閱讀我的情況。 – xecute 2012-04-06 22:42:54

+0

你可以發佈你正在做的代碼片段嗎? – 2012-04-06 23:09:40

回答

2

那麼,一旦用戶加載你的頁面,你可以檢查與JS SDK的用戶授予你的應用程序的權限,如果不包括publish_actions只要求他授予它。

你可以做到這一點在客戶端完全是這樣的:

FB.api("me/permissions", function(response) { 
    if (response && response.data && response.data.lengh == 1 && !("publish_actions" in response.data)) { 
     FB.login(function(response) { 
      console.log(response); 
     }, { scope: "publish_actions" }); 
    } 
}); 

你也可以給用戶發送到身份驗證對話框而不是調用的FB.login,這是給你的。 另外,您可以在服務器端以非客戶端類似的方式檢查權限,這又取決於您。

+0

阻止此代碼的彈出窗口阻止程序:/ so,我在我的網站添加了一個按鈕「如果您想要更好的體驗,請點擊此處並授予權限」:/ – xecute 2012-04-06 23:25:34

+1

是的,當然,它在[FB.loging] (http://developers.facebook.com/docs/reference/javascript/FB.login/)文檔:「*調用FB.login導致JS SDK試圖打開一個彈出窗口。因此,這種方法應該只在用戶點擊事件後被調用,否則彈出窗口將被大多數瀏覽器阻止*「。代碼只是爲了讓你朝正確的方向發展。如果它回答你的問題,請接受答案。 – 2012-04-07 08:16:56

+0

我添加了監聽器到文檔。所以,當用戶點擊任何地方沒有這個權限,它會觸發fb.login。問題解決了 :) – xecute 2012-04-18 12:30:51