2011-03-16 15 views
11

पसंद करने के लिए निर्बाध तरीका है, इसलिए, मैं अपने टैब पर एक आईफ्रेम का उपयोग कर रहा हूं और मैं उन "रोडब्लॉक जैसे" में से एक कर रहा हूं जहां उपयोगकर्ता को गुप्त सामग्री देखने के लिए पृष्ठ को पसंद करने की आवश्यकता है। क्या ऐसा करने के लिए अनुमति देने के लिए ऐसा करने का एक बेहतर और अधिक निर्बाध तरीका है?उपयोगकर्ता को पृष्ठ

मुझे एफबीएमएल के साथ बनाए गए टैब के बारे में पता है, वे अनुमति मांगते नहीं हैं, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि यह एक आईफ्रेम नहीं है।

धन्यवाद!

उत्तर

20

बेशक आप कर सकते हैं! के रूप में documentation में उल्लेख किया है, फेसबुक आप signed_request में कुछ अतिरिक्त जानकारी भेज देगा:

एक उपयोगकर्ता फेसबुक पृष्ठ पर जाता है, वे अपने पृष्ठ टैब अगले उपलब्ध टैब स्थिति में जोड़ा देखेंगे। व्यापक रूप से, एक पृष्ठ टैब कैनवास पृष्ठ के समान ही लोड किया गया है। जब कोई उपयोगकर्ता आपका पृष्ठ टैब चुनता है, तो आपको हस्ताक्षर_request पैरामीटर एक अतिरिक्त पैरामीटर, पृष्ठ के साथ प्राप्त होगा। यह पैरामीटर में एक आईडी (वर्तमान पृष्ठ का पृष्ठ आईडी) के साथ एक JSON ऑब्जेक्ट होता है, व्यवस्थापक (यदि उपयोगकर्ता पृष्ठ के व्यवस्थापक पृष्ठ पर है), और पसंद किया गया (यदि उपयोगकर्ता पृष्ठ को पसंद आया है)। कैनवास पृष्ठ के साथ, आपको उपयोगकर्ता ऐप पर हस्ताक्षर किए गए उपयोगकर्ता जानकारी को उपयोगकर्ता आपके ऐप को अधिकृत करने तक प्राप्त नहीं होगा।

कोड की तरह मेरे tutorial कुछ किया जाना चाहिए से लिया:

<?php 
if(empty($_REQUEST["signed_request"])) { 
    // no signed request where found which means 
    // 1- this page was not accessed through a Facebook page tab 
    // 2- a redirection was made, so the request is lost 
    echo "signed_request was not found!"; 
} else { 
    $app_secret = "APP_SECRET"; 
    $data = parse_signed_request($_REQUEST["signed_request"], $app_secret); 
    if (empty($data["page"]["liked"])) { 
     echo "You are not a fan!"; 
    } else { 
     echo "Welcome back fan!"; 
    } 
} 

function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
     error_log('Unknown algorithm. Expected HMAC-SHA256'); 
     return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
     error_log('Bad Signed JSON signature!'); 
     return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 
?> 

अपडेट किए गए कोड: पिछले कोड काम करेगा है। मैं अनुरोध की वैधता की जांच नहीं कर रहा था। इसका मतलब है कि कोई अनुरोध को छेड़छाड़ कर सकता है और आपको झूठी सूचना भेज सकता है (admin से true पर सेट करना!)। signed_request documentation दृष्टिकोण के बाद, कोड अपडेट किया गया है।

+1

धन्यवाद! मैंने इसे समझ लिया, लेकिन अगर किसी और को जानने की ज़रूरत है तो मैं जवाब पोस्ट करने की सराहना करता हूं। – John

+0

ग्रेट उत्तर और ट्यूटोरियल। –

संबंधित मुद्दे