2011-09-30 9 views
9

मैं अपने मौजूदा एफबी ऐप्स को अपग्रेड कर रहा हूं, और एक सरल PHP आईफ्रेम कैनवास ऐप को अधिकृत और प्रमाणित करने के साथ-साथ एसएसएल का उपयोग करने के लिए पूरी तरह से बोनकर्स चला रहा हूं (। कभी भी कई उदाहरणों को नहीं देखा ...फेसबुक कैनवास ऐप "redirect_uri" प्रमाणीकरण और प्रमाणीकरण के बाद iframe से बाहर तोड़ता है

यहां मैं कहां फंस गया हूं: उपयोगकर्ता ऐप को अधिकृत करता है, और ऐप उपयोगकर्ता को प्रमाणीकृत करता है (मैं टोकन ओके के साथ ग्राफ अनुरोध करने में सक्षम हूं), redirect_uri होता है, और पूरे पृष्ठ को रीफ्रेश करता है, फेसबुक छोड़कर और तत्काल मुझे फेसबुक पर इफ्रैम किए जाने के बजाय, मेरे "कैनवास यूआरएल" पृष्ठ (मेरे सर्वर के डोमेन के साथ) की सामग्री दिखाता है।

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 

$code = $_REQUEST['code']; 

if(!$code){ 
$display= 'page'; 
$scope= 'manage_pages, offline_access, read_insights, publish_stream, user_about_me, user_likes, email'; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$oauth_url = 'https://www.facebook.com/dialog/oauth?canvas=1&client_id='.$app_id.'&display='.$display.'&redirect_uri='.urlencode($redirect_url).'&scope='.$scope; 
$config = array('appId' => $app_id,'secret' => $app_secret,'cookie' => true,'domain' => true); 
$facebook_client = new Facebook($config); 

echo "<script type=\"text/javascript\">top.location.href = \"".$oauth_url."\";</script>"; 
} 
?> 

और दूसरे पृष्ठ (चरण 2:

मैं वर्तमान में एक कच्चे दो चरणों वाली प्रक्रिया के रूप में इस है ...

यहाँ मेरी कोड पहले पृष्ठ (index.php) पर कैसा दिखता है .php):

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 


if($_REQUEST['code']){ 
$code=$_REQUEST['code']; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$link="https://graph.facebook.com/oauth/access_token?canvas=1&client_id=".$app_id."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$app_secret."&code=".$code; 
$string = file_get_contents($link); 
$auth_token=substr($string, 13, 150); 

$graph_url = "https://graph.facebook.com/me?access_token=".$auth_token; 
$user = json_decode(file_get_contents($graph_url)); 
echo("Hello " . $user->name); 
} 

फिर, उपयोगकर्ता एप्लिकेशन को प्राधिकृत किया है, और एप्लिकेशन को उपयोगकर्ता, ग्राफ कॉल काम करता है प्रमाणीकृत किया है एक बार।

कोई विचार?

+0

संभावित डुप्लिकेट [मुझे अपने फेसबुक ऐप में साइन_रेक्वेस्ट के लिए एक अपरिभाषित अनुक्रमणिका क्यों मिलती है?] (Http://facebook.stackoverflow.com/questions/7534241/why-do-i-get-an-undefined-index -for-sign-request-in-my-facebook-app) – ifaour

उत्तर

1

वैसे मुझे यह काम मिल गया। ऐप> सेटिंग्स> मूल पर मैंने नामस्थान सेट नहीं किया था, इसलिए यूआरएल ने मुझे फेसबुक पर ऐप के लिए दिया था: https://apps.facebook.com/123456789/ और अब नामस्थान के साथ उन्होंने इसे बदल दिया: https://apps.facebook.com/myappname। तो हो सकता है कि यह हो सकता है। मैंने इस पृष्ठ पर सरल PHP ऑटोराइजेशन डेमो का सावधानी से पालन करने की कोशिश की: https://developers.facebook.com/docs/appsonfacebook/tutorial/ और ऐसा लगता है कि अभी ठीक है।

सहायता के लिए धन्यवाद!

+0

मैंने एक ही चीज़ देखी। जब मैं नामस्थान के साथ यूआरएल का उपयोग करता हूं तो यह काम करता है। जब मैं ऐप आईडी के साथ यूआरएल का उपयोग करता हूं तो यह विफल हो जाता है। WTH? – hekevintran

6

ओएथ संवाद पर नेविगेट करते समय वेब पेज (आपके ऐप में फ्रेम नहीं है) ओएथ यूआरएल पर नेविगेट किया जाता है। प्रमाणीकरण के बाद फेसबुक आईफ्रेम में वापस आने के लिए आपको OAuth रीडायरेक्ट URL को canvas_page URL पर सेट करने की आवश्यकता है। उपरोक्त दिखाया गया कोड रीडायरेक्ट होने पर माइसेवर के यूआरएल पर नेविगेट कर रहा है, इसलिए आपका ऐप पूरे पेज को ले जाता है (क्योंकि आपने ओथ संवाद में नेविगेट करते समय फेसबुक आईफ्रेम छोड़ा था)। कैनवास_रल पर आपके कोड को यह निर्धारित करने की आवश्यकता है कि क्या इसे प्राधिकरण (सफलता या विफलता) से दर्ज किया जा रहा है या यदि इसे प्रमाणीकरण के बाद वैध पहुंच टोकन के साथ दर्ज किया जा रहा है।

इसके अलावा आपके कैनवास_पृष्ठ यूआरएल में फेसबुक ऐप होस्ट और आपकी एप्लिकेशन आईडी शामिल है। यह फेसबुक ऐप होस्ट और आपका एप्लिकेशन नाम होना चाहिए (रीडायरेक्ट यूआरएल आपके ऐप के डेवलपर पेज पर "कैनवास पेज" यूआरएल जैसा होना चाहिए)।

+0

मैंने कोशिश की लेकिन मुझे एपीआई त्रुटि मिली कि यह कहने के लिए कि फेसबुक डोमेन की अनुमति नहीं थी। – jonkeegan

+0

मुझे लगता है कि आपका कैनवास_पृष्ठ यूआरएल गलत है, ऊपर देखें। कैनवास_रल के अंत में –

+0

आपको "http://apps.facebook.com/my_canvas_name" "http://apps.facebook.com/my_canvas_name/" – mjs

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