2011-11-18 11 views
6

में विफल रहता है मैं नवीनतम LightOpenID रिलीज के साथ एक ओपनआईडी लॉगिन सिस्टम को कार्यान्वित करना चाहता हूं। मैं लाइन द्वारा स्रोत कोड लाइन के साथ प्रदान किए गए उदाहरण का परीक्षण कर रहा हूं (मैंने कन्स्ट्रक्टर में $_SERVER['HTTP_HOST'] के साथ localhost को प्रतिस्थापित किया है)।ओपनआईडी लॉगिन कोड लाइव सर्वर

मुद्दा यह है कि सब कुछ एक निजी नेटवर्क (विंडोज़ विस्टा पर PHP/5.3.6) के अंदर मेरे विकास बॉक्स में ठीक काम करता है लेकिन एचएसपी सार्वजनिक नेटवर्क पर मेरे जीवन सर्वर में सत्यापन हमेशा विफल रहता है (CentOS पर PHP/5.3.3)।

मैंने var_dump() को चारों ओर जोड़ा है और मैं आपको बता सकता हूं कि कोड की दोनों प्रतियां बिल्कुल वही अनुरोध पैरामीटर उत्पन्न करती हैं और वास्तव में वही प्रतिक्रिया पैरामीटर प्राप्त करती हैं (जीईटी के माध्यम से)। केवल openid.assoc_handle, openid.sig, openid.response_nonce और openid.return_to के पास अलग-अलग मान हैं, जो मुझे लगता है कि अपेक्षित व्यवहार है।

लेकिन, मेरा देव बॉक्स (जो एक मैं का उपयोग कोई फर्क नहीं पड़ता) OpenID प्रदाता से यह प्राप्त करता है:

is_valid:true 
ns:http://specs.openid.net/auth/2.0 

... और मेरे लाइव लोमड़ी इस प्राप्त करता है:

is_valid:false 
ns:http://specs.openid.net/auth/2.0 

वहाँ नहीं कर रहे कोई भी गैर-ASCII वर्ण शामिल नहीं है, इसलिए यह एक एन्कोडिंग समस्या नहीं हो सकता है। मेरी होस्टिंग सेवा में कुछ गड़बड़ होनी चाहिए लेकिन मैं सिर्फ यह नहीं समझ सकता कि क्या।

मुझे संभावित कारणों और समस्या निवारण युक्तियों के बारे में सुझावों की आवश्यकता है।

उत्तर

11

मैंने समस्या को अलग कर दिया है और एक कामकाज पाया है। request() विधि पता लगाने के लिए HTTP कनेक्शन को दृढ़ करने के लिए कैसे कुछ ऑटो का पता लगाने में आता है:

protected function request($url, $method='GET', $params=array(), $update_claimed_id=false) 
{ 
    if (function_exists('curl_init') 
     && (!in_array('https', stream_get_wrappers()) || !ini_get('safe_mode') && !ini_get('open_basedir')) 
    ) { 
     return $this->request_curl($url, $method, $params, $update_claimed_id); 
    } 
    return $this->request_streams($url, $method, $params, $update_claimed_id); 
} 

मेरी देव बॉक्स में है कर्ल का उपयोग करता है, लेकिन मेरे लाइव बॉक्स में file_get_contents() का उपयोग करता है क्योंकि जांच विफल रहता है। कारण यह है कि open_basedir निर्देश खाली नहीं है।

अगर मैं LightOpenID को कर्ल का उपयोग करने के लिए मजबूर करता हूं, तो सब कुछ सुचारू रूप से चलता है।


# 1 अद्यतन: जब कि कर्ल निर्णय लेने से LightOpenID सही था प्रयोग करने योग्य नहीं था।

जब सेफ_मोड सक्षम किया गया है या एक open_basedir

file_get_contents() संस्करण के लिए के रूप में सेट कर दिया जाता CURLOPT_FOLLOWLOCATION सक्रिय नहीं किया जा सकता है, मुझे लगता है मैं लिखने में कोई गलती मिल गया है: मैं लॉग फ़ाइल में यह पाया लाइब्रेरी:

Index: lightopenid/openid.php 
=================================================================== 
--- lightopenid/openid.php (0.60) 
+++ lightopenid/openid.php (working copy) 
@@ -349,7 +349,7 @@ 
      $this->headers = $this->parse_header_array($http_response_header, $update_claimed_id); 
     } 

-  return file_get_contents($url, false, $context); 
+  return $data; 
    } 

    protected function request($url, $method='GET', $params=array(), $update_claimed_id=false) 

मैंने लेखक को सूचित किया है और उन्होंने पुष्टि की है कि यह एक बग है। यदि यह तय हो जाता है तो मैं वापस रिपोर्ट करूंगा।

# अद्यतन 2: जून 2012 को गुरु शाखा में बग was fixed यह अभी भी स्थिर रिलीज का हिस्सा नहीं है, लेकिन code repository से डाउनलोड किया जा सकता है।

+0

फिक्स के लिए धन्यवाद। हालांकि डुप्लिकेट किया गया है, मुझे आश्चर्य है कि फ़ाइल_get_contents ($ url, false, $ संदर्भ) के लिए दूसरी कॉल क्यों है जो $ डेटा के बराबर है, काम नहीं करता है? – neobie

+2

मुझे लगता है कि आप केवल सुरक्षा कारणों से सफलतापूर्वक एक कॉल मान्य कर सकते हैं। –

+0

इसे किसी कारण के लिए 'nonce' कहा जाता है। यह एक बार-बार टोकन है। – Maerlyn

0

अंधेरे में बस एक शॉट लेकिन जब मैंने ओपनआईडी (लाइटोपेनिड नहीं) के साथ काम किया लेकिन कोडइग्निटर के लिए लाइब्रेरी, मुझे एक समान समस्या मिली जब मेरी अनुमतियां गैर कैश फ़ोल्डर के लिए सही ढंग से सेट नहीं की गई थीं। शायद भंडारण के लिए यह एक साधारण अनुमति मुद्दा है?

+0

जहां तक ​​मुझे पता है, LightOpenID भंडारण का उपयोग नहीं करता है। लेकिन मुझे एक अंतर मिला है: लाइव सर्वर में कर्ल उपलब्ध नहीं है और LightOpenID इसके बजाय 'file_get_contents()' का उपयोग करता है। मैं यह पता लगाने की कोशिश करूंगा कि यह प्रासंगिक है या नहीं। –

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