簡體   English   中英

Facebook PHP SDK –如何知道我是否需要$ facebook-> getUser()?

[英]Facebook PHP SDK – how do I know if $facebook->getUser() is the user I need?

僅用幾句話就很難解釋這一點,所以讓我更加准確一些。

我有一個網站,可以選擇連接到Facebook,以提供更多功能。 對於這些功能,該站點通過圖api獲取一些信息:基本個人資料+朋友。

一些用戶直接與Facebook連接,而另一些用戶則以更經典的方式使用其登錄名/密碼進行連接。

對於那些使用其登錄名和密碼進行連接,並希望將其帳戶連接到Facebook的用戶,我將使用php SDK進行常規操作。 改編自facebook的github

// Get User ID
$user = $facebook->getUser();

// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.

if ($user) 
{
  try 
  {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
    $user_friends = $facebook->api('/me/friends');
  } 

  catch (FacebookApiException $e) 
  {
    error_log($e);
    $user = null;
  }
}

else
{
    header('Location:'.$facebook->getLoginUrl());
}

問題是,如果用戶從朋友的設備進行連接,則瀏覽器很可能連接到他朋友的Facebook,而不是我的用戶。 否則可能根本沒有連接到Facebook的用戶。

因此,$ facebook-> getLoginUrl()將不會連接到我用戶的Facebook,而是連接到他朋友的Facebook。 這很煩人,因為如果他的朋友從未連接過我的應用程序,它將彈出自動審核對話框。

或者,如果沒有連接的用戶,則從要求連接到某人的Facebook帳戶開始。

在這兩種情況下,我都不想通過loginUrl連接到Facebook,而是使用令牌(存儲在數據庫中)訪問所需的數據。 但是,這些令牌僅持續60天,因此每次用戶可以通過loginUrl進行連接時,最好這樣做是因為它會刷新令牌的到期日期。

最后,我的問題是:是否有可能在重定向到loginUrl之前知道用戶的ID,或者是否根本沒有用戶連接到Facebook?

還是有其他解決方案可以避免提示身份驗證對話框?

因為您使用的是第三方登錄系統,所以我會說您不是真正在處理敏感信息。 您處理某種社區網絡的可能性更大。 我不會擔心您面臨的問題,因為如果用戶不希望某人看到那里的敏感信息,他們將退出Facebook。 不過您可以采取的解決方案是清除Facebook Cookie,並強制網站將其注銷。 但是您的用戶可能不喜歡這樣。 所以你可以做到這一點。

>>clear face book cookies
>>ask login info
>>relog into facebook

重新登錄到臉書可能有些棘手,但我確定您可以弄清楚。

要最終確定您的問題,在重定向到登錄URL之前是否可能知道用戶ID,答案是肯定的。 只需檢查facebook cookie,然后對它們進行解碼(如果已編碼)。

暫無
暫無

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

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