我已经在我的开发网站上使用 cakePHP (http://code.42dh.com/openid/) 设置了一个基本的 openID 系统:http://dev.cyclistsroadmap.com/users/login (原谅调试输出)。它适用于 myopenID,但不适用于 yahoo(flickr 图标)
它返回一个身份 URL,但坚持“OpenID 验证失败:在 https://me.yahoo.com/a/ .... 处找不到 OpenID 信息”,并且对 google 根本不起作用。
它适用于 myopenID 的事实使我相信我的设置正确。尽管 URL 已返回,但雅虎为何仍会失败,有任何线索吗?
编辑:看来 PHP 可能无法执行 SSL,这是否可能是导致 Yahoo 失败的原因?
最佳答案
我最近也走上了同样的道路,花了我一段时间才弄清楚。查看 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 安装中的问题。解决此问题的最简单方法是在捆绑的 Yadis ParanoidHTTPFetcher 中禁用 SSL 验证:
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);
}
关于cakephp - openID 和 CakePHP : myopenID works, yahoo 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988363/