हाइब्रिडअथ/PHP फेसबुक एसडीके प्रमाणीकरण असफल(getUser 0 रिटर्न)




facebook oauth (4)

हाइब्रिड एथ स्कोप पैरामीटर में "0" की एक श्रृंखला जोड़ता है मुझे यकीन नहीं है कि हाइब्रिड ऑथ कोर कक्षा को संशोधित करने का यह विचार कितना अच्छा है, लेकिन मैंने अभी हाइब्रिड / प्रदाता / फेसबुक.php में लॉग इन बिनिंग फ़ंक्शन को संशोधित किया है और यह ठीक काम कर रहा है:

function loginBegin()
{
  $parameters = array("scope" => $this->scope, "redirect_uri" => $this->endpoint, "display" => "page");
  $optionals  = array("scope", "redirect_uri", "display");

  foreach ($optionals as $parameter){
    if( isset( $this->config[$parameter] ) && ! empty( $this->config[$parameter] ) ){
      $parameters[$parameter] = $this->config[$parameter];
    }
  }

  if (isset($parameters['scope'])) {
    foreach ($parameters['scope'] as $key => $parameter){
      if ($parameter == '0') {
        $parameters['scope'][$key] = '';
      }
    }
  }

  // get the login url 
  $url = $this->api->getLoginUrl( $parameters );

  // redirect to facebook
  Hybrid_Auth::redirect( $url );
}

मैं हाइब्रिडऑथ को कॉन्फ़िगर करने की कोशिश कर रहा हूं और मैं बहुत प्रारंभिक चरण में हूं। अभी मैं जो करना चाहता हूं वह कनेक्ट है और यह सुनिश्चित कर लेता है कि एए फेसबुक पर पुनर्निर्देशित होगा और ऐप इंस्टॉलेशन के लिए प्रॉम्प्ट करेगा, फिर जब वे वापस आ जाएंगे तो उपयोगकर्ता को प्रमाणित करेंगे।

मैं निम्नलिखित से मैन्युअल रूप से बुला रहा हूं: http://mydomain.com/auth.php?provider=Facebook

auth.php इस तरह दिखता है:

session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . "/func/db_connect.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/api/auth/Hybrid/Auth.php");      // HybridAuth Module 

$hybridauth_config = include($_SERVER['DOCUMENT_ROOT'] . '/api/auth/config.php');

if ($_GET['provider'] == '' || !in_array($_GET['provider'], array_keys($hybridauth_config['providers']))) {
    echo 'Invalid Provider';
} else {
    try { 
        $hybridauth = new Hybrid_Auth($hybridauth_config);

        // try to authenticate with this provider
        $adapter = $hybridauth->authenticate($_GET['provider']);

        // grab user profile
        if ($hybridauth->isConnectedWith($f_provider)) {
            // yep, we're connected.  Add this provider's info to the user_auth table
            echo 'connection successful';
        }

    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

यह काम करता है कि वह इसके लिए आगे बढ़ता है और उपयुक्त अनुमतियों के साथ सही ऐप स्थापित करने के लिए संकेत देता है। यह मुझे बताता है कि मेरी एचएफ़ ठीक काम कर रही है। मैं एप्लिकेशन को सफलतापूर्वक इंस्टॉल करता हूं और फिर पृष्ठ पर वापस रीडायरेक्ट करता हूं, जहां मुझे संदेश मिलता है:

Authentification failed! Facebook returned an invalide user id.

क्या देता है? मेरा ऐप FB नियंत्रण कक्ष में 0 जोड़ता है और 0 एपीआई कॉल दिखाता है (यद्यपि यह डेटा ऐसा लगता है कि इसमें कुछ दिन देरी हो सकती है)। क्या मैं किसी तरह से ऐप को सक्षम करने के लिए एफबी की प्रतीक्षा कर रहा हूं? क्या मुझसे कुछ गलत हो रही है?

अद्यतन करें

हाइब्रिडऑथ फेसबुक एसडीके का इस्तेमाल करता है, इसलिए मैंने पूरे समीकरण से हा को खत्म करने की कोशिश की। निम्न बुनियादी उदाहरण चलाना:

session_start();

require($_SERVER['DOCUMENT_ROOT'] . "/path/to/fbsdk/facebook.php");
$facebook = new Facebook(array(
  'appId'  => 'myappid',
  'secret' => 'myappsecret',
  'fileUpload' => true
));

$user = $facebook->getUser();
var_dump($user);

मैं फेसबुक में लॉग इन हूं और मेरे पास आवेदन जोड़ा गया है, लेकिन कोई भी बात नहीं है जो मैं उपयोगकर्ता आईडी को वापस करता हूं। मैंने परीक्षण उपयोगकर्ताओं का उपयोग करने की कोशिश की है - कोई फायदा नहीं हुआ। क्या कोई सर्वर कॉन्फ़िगरेशन समस्या है जो मुझे यहां याद आ रही है?


मैं एक अलग एप / सर्वर पर अपना कोड चलाया और फिर एक अलग एप पर एक अलग सर्वर पर और सब कुछ ठीक काम किया। इसलिए मैंने इसे एक सर्वर कॉन्फ़िगरेशन समस्या के रूप में देखना शुरू कर दिया। बाहर निकलने पर फेसबुक को मेरे डेवलपमेंट सर्वर पर स्व-हस्ताक्षरित प्रमाणपत्र पसंद नहीं आया।

मैं PHP एसडीके में base_facebook.php वर्ग को बदलकर और एसएसएल सत्यापन चरण को अनदेखा करने के लिए कर्ल को जोड़कर इस समस्या को हल करने में सक्षम था। निचे देखो:

  public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.1',
    CURLOPT_SSL_VERIFYPEER => false
  );

किसी और के लिए इस पर आ रहा है और इसके बाद के संस्करण काम नहीं कर रहा है, मैं उसी मुद्दे का सामना कर रहा था जो एक मुड़ता हुआ फेसबुक पर मेरा ऐप सैंडबॉक्स मोड में था। ऐप सेटिंग्स के तहत इसे बंद करना एक उपयोगकर्ता यूजर आईडी प्राप्त करने के मुद्दे को हल करने के लिए निकला।


मैंने यह पता लगाया है कि यह त्रुटि हाइब्रिडाथ और फेसबुक एसडीके के वर्तमान संस्करण में भी क्यों प्रकट होती है।

इसका कारण यह है कि कैसे hybridauth और Google या facebook sdk redirect_uri पैरामीटर बनाता है। जैसा कि हम https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/ से जानते हैं, पहले हमें उपयोगकर्ता को फेसबुक पर रीडायरेक्ट करना होगा (रीडायरेप_यूरी परम के साथ) और इससे प्रतिक्रिया में कोड वापस आता है चूक। हम एचटीटीपी अनुरोध को फिर से कर्ल के माध्यम से भेजा (रीडायरेअर यूरी परम के साथ) और इन यूआरएल से मेल नहीं खाया जाता है, क्योंकि पहले उल्लेख किया गया कारण

यदि आप हाइब्रिडाथ कॉन्फ़िग "base_url" => "http:// yourhost /hybridauth/hybridauth" बेस_रिल "base_url" => "http:// yourhost /hybridauth/hybridauth" (स्लैश के बिना) में सेट हैं तो अन्य शब्द -> यह Google के लिए ठीक काम करेगा, लेकिन आपको फेसबुक लॉगिन के लिए यह बेवकूफ संदेश त्रुटि दे।

"base_url" => "http:// yourhost /hybridauth/hybridauth/" , (स्लेश के साथ) फेसबुक के साथ ठीक काम करेगा, लेकिन "त्रुटि पुनर्निर्देशन उरी मिसामैच" के साथ Google के साथ त्रुटि का परिणाम होगा।

तो जल्दी ठीक से सबसे अच्छा नहीं है "base_url" => "http:// yourhost /hybridauth/hybridauth " (स्लेश के बिना) config में

और फिर चुनें कि कैसे यूरी बनाने के लिए प्रदाता पर निर्भर करता है।

Provider_Adapter.php टिप्पणी पंक्ति 131 // $this->params["login_done"] = $HYBRID_AUTH_URL_BASE . ( strpos( $HYBRID_AUTH_URL_BASE, '?' ) ? '&' : '?' ) . "hauth.done={$this->id}"; // $this->params["login_done"] = $HYBRID_AUTH_URL_BASE . ( strpos( $HYBRID_AUTH_URL_BASE, '?' ) ? '&' : '?' ) . "hauth.done={$this->id}";

और इसके बजाय इन दो जोड़ दें

$dlm = $this->id == "Facebook" ? "/?" : "?";

$ the-> परामश ["login_done"] = $ HYBRID_AUTH_URL_BASE (स्ट्रॉप्स ($ HYBRID_AUTH_URL_BASE, $ dlm)? 'और': $ dlm) "Hauth.done = {$ this-> id}";

इस तरह हमारे पास फेसबुक और Google दोनों का समर्थन करने का समाधान है





hybridauthprovider