【问题标题】:Facebook SDK 4.0 - FacebookSession - Session will not validateFacebook SDK 4.0 - FacebookSession - 会话不会验证
【发布时间】:2014-06-03 21:17:02
【问题描述】:

我正在构建一个 FB 标签页。 在主页上,我可以使用 signed_request 成功设置 FacebookSession。 我开始一个会话并将$facebookSession->getToken() 存储在$_SESSION['token'] 中。

$session = FacebookSession::newSessionFromSignedRequest($signedRequest);
$_SESSION['token'] = $session->getToken();

当我导航到 IFrame 中的另一个 PHP 页面时,我会根据存储的令牌创建另一个 FacebookSession。

FacebookSession::setDefaultApplication($appId, $appSecret);
$session = new FacebookSession($_SESSION['token']);

会话已创建,但当我尝试验证此会话时,SDK 会抛出“会话已过期,或对此应用无效”-异常。

$session->validate()

欢迎提出任何想法。

【问题讨论】:

  • 如果您在developers.facebook.com/tools/debug 中调试令牌,它会说什么?
  • 不多说了,我目前正在开发的应用程序指向的本地服务器上工作(local.dev
  • 调试工具还可以调试令牌,而不仅仅是用于 URL - 您确定您在页面标签应用中使用的应用 ID 与您在 PHP 代码中使用的应用 ID 相同吗?
  • 是的,所有应用程序数据都匹配,如果就这么简单的话。 :)

标签: php facebook session sdk


【解决方案1】:

您好,我想我找到了答案。

FacebookSession 类有 1 个强制构造函数参数 $accessToken 和一个可选 $parsedSignedRequest。

我只是将令牌存储在会话中并且只使用这个令牌。 我目前还将解析的签名请求存储在会话 ($session->getSignedRequestData()) 中,并将其与令牌一起作为构造函数变量传递。 这将恢复会话。

存储在主页上:

$_SESSION['token'] = $this->fbSession->getToken();
$_SESSION['signed_data'] = $this->fbSession->getSignedRequestData();

在第二页重新初始化会话:

$token = $_SESSION["token"];
$parsedSignedData = $_SESSION["parsedSignedData"];
$session = new FacebookSession($token, $parsedSignedData);

我不知道这是否是正确的做法,但至少它有效。 :)

请随意提出替代方案。

【讨论】:

    【解决方案2】:

    正确的做法是使用$token 创建新会话

    第一页应该是

    $_SESSION['token'] = $this->fbSession->getToken();
    

    应该在第二页

    $token = $_SESSION["token"];
    $session = new FacebookSession($token);
    

    默认情况下SignedRequest 应该是NULL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2016-11-12
      • 2015-12-09
      相关资源
      最近更新 更多