从已签名的请求中删除app_data

时间:2011-12-06 10:56:15

标签: facebook-php-sdk signed

当我使用GET请求调用我的fb-app时,例如“?app_data = 1”,该变量位于已签名的请求中。好的,到目前为止。但是,当我点击我的fb-app中的另一个链接时,app_data仍然在已签名的请求中。我的应用程序重新启动它,但我不再需要它。

如何删除签名请求中的app_data?有没有人建议这个问题?

我使用PHP和JS SDK。

$aSignedRequest = $_REQUEST['signed_request'];
if(isset($aSignedRequest))
{
    $sSignedRequest = $aSignedRequest['signed_request'];
    list($sEncodedSig, $sPayload) = explode('.', $sSignedRequest, 2);

    // decode the data
    $aData = json_decode(base64_decode(strtr($sPayload, '-_', '+/')), true);
    $iContestId = $aData['app_data'];
}

1 个答案:

答案 0 :(得分:1)

以下是解决方案:

unset($aData['app_data']);
$sData = json_encode($aData);
$sPayload = base64_encode($sData);
$sEncodedSig = hash_hmac('sha256', $sPayload, '<<fb app-secret>>', $raw = true);
$sSignedRequest = base64_encode($sEncodedSig).'.'.$sPayload;
$_REQUEST['signed_request'] = $sSignedRequest;