簡體   English   中英

Facebook:登錄后重定向,用戶會話為空?

[英]Facebook: Redirect after login, user session is empty?

我正在嘗試在iframe應用程序內請求一些權限的同時將用戶身份驗證(登錄)到Facebook。

我將JS SDK與PHP SDK結合使用。 因此,首先我檢查用戶是否已登錄,並使用PHP $facebook->getUser()一切正常,當失敗時,我將用戶重定向到運行此JS的頁面:

FB.getLoginStatus(function(response) {
    if (response.status === "connected") {
        // Ok, go home
    } else {
        FB.login(function(response) {
            if (response.authResponse) {
                // Ok, go home
            } else {
                // Cancelled, go home
            }
        }, {scope: '<?php echo implode(',', $this->permissions); ?>'});
    }
});

然后,這將創建一個登錄對話框,詢問權限。 如您所見,在某些情況下,用戶已正確進行身份驗證/授權以及對話框被取消的情況。 在任何一種情況下,我都需要做一件事:重定向回我的應用程序的根目錄。

因此,彈出對話框,用戶登錄,然后將他重定向回首頁,在這里我使用PHP來getUser()

這里的問題是,第一次登錄並重定向用戶時, getUser()始終為空,因此沒有用戶會話。 如果刷新保存應用程序iframe的Facebook頁面,則表明存在會話和權限已正確設置,表明對話框已完成工作。

為什么第一次重定向為什么不起作用?

我發現了類似的問題,但沒有給我一個具體的可行的解決方案。

如果還有其他人遇到相同的問題,這是我所學到的:

  1. Facebook聲稱在使用JS設置后將會話cookie提供給PHP,但這不是事實,至少在所有時候都如此!
  2. 對此的唯一解決方案(至少是我能想到的唯一解決方案)是,當您使用JS登錄到后端(PHP)時,手動傳遞訪問令牌。 將其存儲在該會話中,並在可用時(而不是Facebook API嘗試使用的訪問令牌)使用它。 只需調用$api->setAccessToken($yourNewToken);
  3. 您可以繼續測試以查看令牌何時確切可用,但對我而言,通常在第二次api調用之后立即可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM