2009-07-25 9 views
3

Ich habe versucht, eine einfache OpenId-Anmeldung mit ersten php-openId (Jain) und dann das ZendFramework arbeiten, und in beiden Fällen laufe ich gegen eine ähnliche Problem. Ich verwende den Beispiel-Zend-Code aus Schritt 38.2.2 von http://framework.zend.com/manual/en/zend.openid.consumer.html.Zend_OpenId_Consumer Login-Funktion hängt - auch im Beispielcode

Ich sehe die Login-Seite in Ordnung, aber wenn ich meine OpenID eingeben, dieser Code ausgeführt: if (isset ($ _ POST [ 'openid_action']) & & $ _POST [ 'openid_action'] == " login“& & ! empty ($ _ POST [ 'openid_identifier'])) {

echo "New consumer"; 
    $consumer = new Zend_OpenId_Consumer(); 
    echo "Gotim"; 

    if (!$consumer->login($_POST['openid_identifier'])) { 
     $status = "OpenID login failed."; 
     echo "Failure"; 
    } 
    echo "Continuing"; 

der Code scheinbar zu $ ​​konsumenten> Anmeldung auf dem Funktionsaufruf hängt. Ich sehe die Ausgabe von meinen ersten zwei Echos, aber ich sehe nie Ausfall oder Fortsetzung (und ohne die Echos bekomme ich nur einen 500 Server internen Fehler, wenn ich versuche, mich anzumelden). Wenn ich eine ungültige openId gebe, dann bekomme ich die korrekte "OpenID Anmeldung fehlgeschlagen." Fehlermeldung.

Ich entschuldige mich, wenn ich hier ein Idiot bin. Ich bin ein ehemaliger Programmierer, der zum Management befördert wurde, und ich versuche, darauf zurückzukommen - aber ich benutze eine Reihe von Technologien, die neu für mich sind (PHP, OpenID, Zend Framework), und das ist einfach nicht Das macht jetzt keinen Sinn.

Hat jemand irgendwelche Ideen, wo man hinschauen? Ich kann nicht glauben, dass das Framework selbst fehlerhaft ist (besonders nicht, wenn ich ein ähnliches Problem mit dem Jain OpenId-Kram hatte). Ich benutze fatcow.com für Webhosting - nicht sicher, ob das relevant ist.

+0

Überprüfen Sie Ihre Serverprotokolle! Sie können/werden einige zusätzliche Fehlerinformationen bereitstellen. – jason

+0

Ich habe überprüft, und leider gibt es keine Fehlerprotokolle von diesem Aufruf erzeugt. – papagen0

Antwort

0

Ich verstehe immer noch nicht wirklich, was falsch ist, aber ich habe versucht, den gleichen Code auf einem anderen Web-Host (x10hosting.com) laufen und mein Beispiel-Code arbeitete sofort. Daher muss ich daraus schließen, dass dies eine Art Einschränkung des Fatcow-Webhosting-Dienstes ist, was eher eine Schande ist. Ich denke, ich werde Gastgeber wechseln.

+0

Ich würde mit verschiedenen 'Zend_Http_Client' (die die OpenID-Consumer-Klasse intern verwendet) herumspielen, um zu sehen, ob Sie mehr Glück mit ihnen haben. Siehe meine Antwort http://stackoverflow.com/questions/1183276/1201864#1201864 – jason

0

Wenn Sie einen 500-Fehler erhalten, gibt es definitiv eine detailliertere Nachricht in den Webserver-Protokollen. Wenn Ihr Server Apache ausführt, dann ist es höchstwahrscheinlich unter/usr/local/apache/logs/error_log oder/etc/httpd/logs/error_log oder etwas Ähnliches. Ich gehe davon aus, dass Sie einen gemeinsamen Hosting-Plan haben, so dass Sie keinen Zugriff darauf haben. Sie sollten sich an Ihre Webhosting-Firma wenden, da diese in der Lage ist, die Protokolle für Sie zu durchsuchen.

1

Ihr Code scheint zu versagen, wenn Sie versuchen, die externe HTTP-Verbindung zum OpenID-Anbieter herzustellen. Dies könnte durch eine Reihe von Dingen verursacht werden, aber hier ist ein paar Vorschläge:

  • Vielleicht sind Sie hinter einem Proxy?
  • Wenn dies nicht der Fall ist, kann Ihr aktueller Host möglicherweise keine Remote-Server mit Sockets kontaktieren (die url_fopen Ini-Direktive). Der Standardadapter für Zend_Http_Client ist der Socket-Adapter.

Also, ich würde empfehlen, versucht, eine Zend_Http_Client Instanz passieren einen anderen Adapter zu Ihrem Zend_OpenId_Consumer Klasse mit der setHttpClient Methode.

Es gibt ein paar verschiedene client adapters zur Verfügung:

  • Zend_Http_Client_Adapter_Socket (Standard)
  • Zend_Http_Client_Adapter_Proxy
  • Zend_Http_Client_Adapter_Test
  • Zend_Http_Client_Adapter_Curl

so etwas wie dieses versuchen:

$client = new Zend_Http_Client(null, array(
    'adapter' => 'Zend_Http_Client_Adapter_Proxy', 
    'proxy_host' => 'example.com', 
    'proxy_port' => 8000, 
    'proxy_user' => 'user', 
    'proxy_pass' => 'pass' 
)); 

$consumer = new Zend_OpenId_Consumer(); 
$consumer->setHttpClient($client); 

Ihr ISP sollte Dokumentation über ihren Proxy haben, wenn dies tatsächlich das Problem ist. Wenn Proxying nicht Ihr Problem ist, versuchen Sie den curl Adapter und sehen Sie, ob Sie noch mehr Glück haben.