2010-10-21 4 views
2

J'ai mis en place un système openID de base en utilisant cakePHP (http://code.42dh.com/openid/) sur mon site de développement: http://dev.cyclistsroadmap.com/users/login (pardonner la sortie de débogage). Il fonctionne parfaitement pour myopenID mais pas pour yahoo (icône flickr)openID et CakePHP: myopenID fonctionne, yahoo n'a pas

Il retourne avec une URL d'identité mais insiste sur le fait que "la vérification OpenID a échoué: aucune information OpenID trouvée à https://me.yahoo.com/a/ ...." et ne fonctionne pas du tout pour Google.

Le fait que cela fonctionne pour myopenID me porte à croire que j'ai des choses correctement configurées. Des indices quant à pourquoi Yahoo ne parvient pas à dépsite l'URL à revenir?

EDIT: Il semble que PHP ne puisse pas faire de SSL, est-ce possible que c'est ce qui fait échouer Yahoo?

Répondre

4

Je suis allé sur ce même chemin juste récemment, m'a pris un moment pour comprendre. Jetez un oeil dans votre journal des erreurs PHP, pour moi c'est MAMP/logs/php_error.log. Vous trouverez probablement quelque chose le long de ces lignes:

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 

Ceci peut poser un problème dans les installations PHP/OpenSSL locales. La meilleure façon de résoudre ce problème est de désactiver la vérification de SSL dans le empaqueté 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); 

Pour activer la vérification hôte SSL sur votre système de production, ajouter quelque chose comme ça dans core.php:

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

Cette semble avoir travaillé pour Flickr (je pense) va continuer à essayer. Merci pour la solution! Je souhaite que ce soit une bonne option plutôt qu'un hack. Je suis sur un serveur assez bon marché donc je peux facilement imaginer que le SSL n'est pas vraiment configuré pour moi. – paullb

Questions connexes