2010-10-21 3 views
2

Я установил базовую систему openID, используя cakePHP (http://code.42dh.com/openid/) на моем веб-сайте dev: http://dev.cyclistsroadmap.com/users/login (простить вывод отладки). Он отлично работает для myopenID, но не для yahoo (значок flickr)openID и CakePHP: myopenID работает, yahoo не

Он возвращается с идентификационным адресом, но настаивает на том, что проверка OpenID не выполнена: информация OpenID не найдена в https://me.yahoo.com/a/ .... »и не работает вообще для Google.

Тот факт, что он работает для myopenID, заставляет меня поверить, что я правильно настроил все. Любые подсказки относительно того, почему Yahoo терпит неудачу depsite, вернется URL?

EDIT: Похоже, что PHP, возможно, не сможет выполнить SSL, возможно ли, что это то, что вызывает отказ Yahoo?

ответ

4

Я совсем недавно пропустил этот то же самый путь, мне потребовалось некоторое время, чтобы разобраться. Посмотрите в свой журнал ошибок PHP, для меня это MAMP/logs/php_error.log. Вероятно, вы найдете что-то в этих строках:

Got no response code when fetching https://www.google.com/accounts/o8/ud 
CURL error (60): SSL certificate problem, verify that the CA cert is OK. Details: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

Это может быть проблемой в локальных установках PHP/OpenSSL. Самый простой способ исправить это, чтобы отключить проверку SSL в комплекте Yadis ParanoidHTTPFetcher:

Index: /app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php 
=================================================================== 
--- a/app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php 
+++ b/app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php 
@@ -131,7 +131,9 @@ 
      if (defined('Auth_OpenID_VERIFY_HOST')) { 
       curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true); 
       curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2); 
+   } else { 
+    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); 
      } 
      curl_exec($c); 

      $code = curl_getinfo($c, CURLINFO_HTTP_CODE); 
@@ -204,6 +206,8 @@ 
     if (defined('Auth_OpenID_VERIFY_HOST')) { 
      curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true); 
      curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2); 
+  } else { 
+   curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); 
     } 

     curl_exec($c); 

Чтобы включить SSL проверки хоста на производственной системе, добавить что-то вроде этого в core.php:

if (!Configure::read('debug')) { 
    define('Auth_OpenID_VERIFY_HOST', true); 
} 
+0

Эта похоже, работал на Flickr (я думаю) будет продолжать пытаться. Спасибо за решение! Я бы хотел, чтобы это был правильный вариант, а не взлом. Я нахожусь на довольно дешевом сервере, поэтому я могу легко представить, что SSL для меня не настроен. – paullb