5

प्रलेखन कहता है: "redirect_uri - (वैकल्पिक) उपयोगकर्ता को लॉगिन/प्राधिकरण प्रक्रिया पूर्ण होने के बाद उपयोगकर्ता को रीडायरेक्ट करने के लिए यूआरएल। उपयोगकर्ता को रीडायरेक्ट किया जाएगा लॉगिन सफलता और विफलता दोनों पर यूआरएल, तो आपको प्रमाणीकरण दस्तावेज में वर्णित यूआरएल में त्रुटि पैरामीटर की जांच करनी चाहिए। अगर यह गुण निर्दिष्ट नहीं है, तो उपयोगकर्ता को वर्तमान यूआरएल (यानी पृष्ठ का यूआरएल) पर रीडायरेक्ट किया जाएगा विधि को आम तौर पर उपयोगकर्ता के ब्राउज़र में वर्तमान यूआरएल कहा जाता था)। " तो उपयोगकर्ता ने ऑटोनेन्टिकेशन/अनुमतियों को अस्वीकार कर दिया है, लेकिन पकड़ने के लिए एक तरीका है, लेकिन संबंधित दस्तावेज से लिंक अब मौजूद नहीं है (https://developers.facebook.com/docs/authentication/)।फेसबुक php sdk - पकड़ने पर उपयोगकर्ता ने अनुमति नहीं दी है (प्रमाणीकरण विफल)

सरलता के लिए, redirect_uri एक शुरू करने के लिए php फ़ाइल के रूप में एक ही पता है, और php कोड के रूप में सरल है:

require 'facebook.php'; 
$facebook = new Facebook(array(
    'appId' => 'X', 
    'secret' => 'Y', 
)); 
$user = $facebook->getUser(); 
if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
if (!$user) { 
    $params = array(
    'scope' => 'read_stream, friends_likes', 
    'redirect_uri' => 'http://myapp.com/app' 
); 
    $loginUrl = $facebook->getLoginUrl($params); 
} 

किसी जानता है कि कैसे उस जानकारी को पकड़ने के लिए?

उत्तर

11

आपको अनुमतियों की जाँच करने के लिए निम्न कार्य कर सकते हैं:

$permissions = $facebook->api("/me/permissions"); 
if(array_key_exists('publish_stream', $permissions['data'][0])) { 
    // Permission is granted! 
    // Do the related task 
    $post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!')); 
} else { 
    // We don't have the permission 
    // Alert the user or ask for the permission! 
    header("Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream"))); 
} 
+0

ऐसा नहीं है कि की तरह दिखता है ही एकमात्र विकल्प है अब उपलब्ध है ... अजीब, मैं शर्त लगाता हूं, कि इसे अन्य तरीके से करने का एक तरीका था;) –

0

ऐसा लगता है नवीनतम पीएचपी फेसबुक एसडीके में, वहाँ कोई तरीका है कि -> एपीआई। अनुमतियां प्राप्त करने के लिए इस चेक (कभी-कभी) का उपयोग करके एक समस्या भी प्रतीत होती है। पुराने एसडीके का उपयोग करते समय, कभी-कभी (उपयोगकर्ता द्वारा यादृच्छिक रूप से यह लग रहा था) कुछ उपयोगकर्ताओं को "OAuthException: (# 412) उपयोगकर्ता को एप्लिकेशन इंस्टॉल नहीं किया गया है" भले ही एफबी एक्सेस टोकन डीबगर पर एक चेक उचित अनुमति दिखाता है। नए एसडीके में अपडेट करने के बाद, और अनुमतियों की एक साधारण डेटा सूची प्राप्त करने के लिए नया तरीका निकाला, सब कुछ फिर से काम किया।

इस समाधान को खोजने के लिए मुझे एफबी वेबसाइट में बहुत खुदाई हुई, इसलिए मैंने इसे कुछ और घंटों को उम्मीद से बचाने के लिए यहां पेस्ट किया। वे असली जीवन बचतकर्ता getDecodedBody विधि की मेरी खोज थी (एफबी दस्तावेज़ों में चाल खोजने में बहुत मुश्किल)। मेरा उदाहरण सिर्फ publ_actions के लिए जांचता है।

$fb = new Facebook\Facebook([ 
    'app_id' => your_app_id, 
    'app_secret' => your_secret, 
    'default_graph_version' => 'v2.2', 
]); 

$badperms=true; //start by assume bad permissions 

try { 
    $response = $fb->get('/me/permissions', $at); 
    $perms = $response->getDecodedBody(); 

    if($badperms){ 
     foreach($perms['data'] AS $perm){ 
      if($perm['permission']=='publish_actions' && $perm['status']=='granted') $badperms=false; 
     } 
    } 

} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    log("MSG-received facebook Response exception!! ".$e->getMessage()); 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    log("MSG-received facebook SDK exception!! ".$e->getMessage()); 
} 

if($badperms) { 
    //do something like reflow auth 
} 
0

मुझे बस एक ही समस्या थी, मुझे नहीं पता था कि रद्द करने की कार्रवाई का इलाज कैसे करें (फेसबुक php api और google oauth2 दोनों में)।

समाधान अपेक्षा से कहीं अधिक आसान है।

अनुमति के मामले में प्रतिक्रिया स्वीकार नहीं की गई है (बिल्कुल) कम से कम एक पैरामीटर/चर के साथ आता है: यूआरएल में त्रुटि।

फेसबुक में प्रतिक्रिया ऐसा दिखता है जैसे:

त्रुटि = access_denied & error_code त्रुटि = 200 & error_description = अनुमतियां + त्रुटि & ERROR_REASON = user_denied

गूगल के लिए आप केवल मिल

त्रुटि = access_denied

लेकिन यह पर्याप्त होना चाहिए।

मैं सिर्फ यह जांच रहा हूं कि त्रुटि सेट है या नहीं और यदि यह सेट है तो मैं अपने लॉगिन पेज पर प्रतिक्रिया को पुनर्निर्देशित कर रहा हूं।

मुझे उम्मीद है कि यह किसी की मदद करेगा क्योंकि यह वास्तव में इस चरण को दस्तावेज नहीं किया गया है। वैसे: फेसबुक एपीआई के संस्करण: v5 गूगल एपीआई OAuth2 की संस्करण: 2.0 (मुझे लगता है कि - Google डॉक वास्तव में एक गड़बड़ जब यह नवीनतम संस्करण खोजने के लिए आता है)

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