Zend_OpenId_Consumer oturum açma işlevi asılı - hatta örnek kod

3 Cevap php

Ben basit bir OpenID almaya çalışıyordum ilk php-OpenID (Jain) ve ardından ZendFramework kullanarak çalışma log-in ve her iki durumda da benzer bir sorunla karşı karşıya çalıştırın. I Aşama 38.2.2 arasındaki örnek Zend kodu kullanıyorum http://framework.zend.com/manual/en/zend.openid.consumer.html.

I see the log-in page fine, but when I enter my openId, this code executes: 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";

Kod görünüşte $ tüketici-> login işlev çağrısı asılı. Benim ilk iki echos çıkışını görmek, ama (ben log-in çalıştığınızda ve echos olmadan ben sadece bir 500 Sunucu İç Hata olsun) Ben Başarısızlık veya sürekli ya da görmek asla. Ben geçersiz OpenID girerseniz o zaman ben doğru "OpenID giriş başarısız oldu." Olsun hata mesajı.

Ben burada bir salak oluyorum özür dilerim. Ben yönetimine terfi eski bir programcı değilim, ve ben geri almak için çalışıyorum - ama (PHP, OpenID, Zend Framework) benim için yeni teknolojilerin bir demet kullanıyorum, ve bu sadece değil 't şu anda herhangi bir mantıklı.

Herkes nereye bakmak için herhangi bir fikirleri var mı? (Ben de Jain OpenID malzeme ile benzer bir sorun vardı özellikle değilim) Çerçeve kendisi dinleniyor inanamıyorum. Ben web hosting için fatcow.com kullanıyorum - değil alakalı eğer emin.

3 Cevap

Sizin kod OpenID sağlayıcıya dış HTTP bağlantısı yapmaya çalışırken başarısız gibi görünüyor. Bu şeyler bir dizi neden olabilir, ama burada birkaç öneri var:

  • Belki bir proxy arkasında mısın?
  • Değil, belki mevcut ev sahibi soketi (url_fopen ini yönergesi) kullanarak uzak sunuculara iletişime izin vermez. Için varsayılan bağdaştırıcı Zend_Http_Client onun soket adaptörü.

Yani, setHttpClient yöntemini kullanarak Zend_OpenId_Consumer sınıf için farklı bir adaptör kullanarak Zend_Http_Client örneğini geçmek olduğunu çalışıyorum tavsiye ederim.

Farklı client adapters kullanılabilir bir çift vardır:

  • Zend_Http_Client_Adapter_Socket (varsayılan)
  • Zend_Http_Client_Adapter_Proxy
  • Zend_Http_Client_Adapter_Test
  • Zend_Http_Client_Adapter_Curl

Böyle bir şey deneyin:

 $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);

Your ISP should have documentation about their proxy, if this is in fact the issue. If proxying is not your problem, try the curl adapter and see if you have any more luck.

Ben hala gerçekten yanlış ne anlamıyorum, ama ben farklı bir web barındırma (x10hosting.com) da aynı kodu çalıştırmayı denedim ve benim örnek kod hemen çalıştı. Dolayısıyla, bu oldukça utanç Fatcow hosting hizmeti, sınırlama çeşit olduğunu sonuçlandırmak zorunda. Ben host değişen olacak sanırım.

Eğer bir 500 hatası alıyorsanız, web sunucusu günlüklerinde detaylı mesajı kesinlikle yoktur. Sunucu apache çalışıyorsa, o zaman büyük olasılıkla / usr / local / apache / logs / error_log veya / etc / httpd / logs / hatalar.log veya benzer bir şey altında. Ben bir hosting planı varsayarak yaşıyorum, böylece bu erişimi olmayacaktır. Onlar sizin için günlükleri aracılığıyla bakmak mümkün olacak gibi, sizin webhosting şirketi başvurmalısınız.