Hi,
I am having huge problems getting Zend OpenID working with different
providers, I keep getting strange errors for some of them. First
things first - here is my code:
$status = "";
/**
* Includes and loads
*/
ini_set('include_path', ini_get('include_path') . ':/usr/home/www/domain.com/');
require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
Zend_Loader::loadClass('Zend_OpenId');
$sreg = new Zend_OpenId_Extension_Sreg (
array (
'nickname' => true ,
'email' => true ,
'fullname' => false
), null, 1.1);
/**
* Are we posting - i.e. initial post?
*/
if (isset ($_POST['openid_action']) && $_POST['openid_action'] ==
"Register" && ! empty ($_POST['openid_url']))
{
$consumer = new Zend_OpenId_Consumer ();
if (! $consumer->login ($_POST['openid_url'],
'http://domain.com/register/openid.php',
'http://domain.com/register/', $sreg))
$status = "OpenID login failed.<br>";
}
/**
* We are on our way back from openid!
*/
else if (isset ($_GET['openid_mode']))
{
if ($_GET['openid_mode'] == "id_res")
{
$consumer = new Zend_OpenId_Consumer ();
if ($consumer->verify ($_GET, $id, $sreg))
{
$data = $sreg->getProperties();
$status = "VALID " . htmlspecialchars ($id);
}
else
$status = "INVALID " . htmlspecialchars ($id). "::::".
$consumer->getError();
}
else if ($_GET['openid_mode'] == "cancel")
$status = "CANCELED";
}
Then some HTML below that to display errors etc. This is basically a
copy from the Zend OpenID manual - but here are my problems. If I use
myopenid.com it works fine and this is whats in $_GET (I get a VALID:
MY NAME):
Array
(
[openid_assoc_handle] => {HMAC-SHA256}{4911faf5}{l7eVqQ==}
[openid_claimed_id] => http://myname.myopenid.com/
[openid_identity] => http://myname.myopenid.com/
[openid_mode] => id_res
[openid_ns] => http://specs.openid.net/auth/2.0
[openid_ns_sreg] => http://openid.net/extensions/sreg/1.1
[openid_op_endpoint] => http://www.myopenid.com/server
[openid_response_nonce] => 2008-11-19T13:49:23ZS6e6YZ
[openid_return_to] => http://domain.com/register/openid.php
[openid_sig] => cfYueopSnApXabnFmvTVioIjZGtHiGlfRLMR//qgkv0=
[openid_signed] =>
assoc_handle,claimed_id,identity,mode,ns,ns.sreg,op_endpoint,response_nonce,return_to,signed,sreg.email,sreg.fullname,sreg.nickname
[openid_sreg_email] => [EMAIL PROTECTED]
[openid_sreg_fullname] => Ian Barnes
[openid_sreg_nickname] => MyNickname
)
Fine - so that works. Now if I use yahoo it doesnt work - I get
INVALID: MY NAME and the error is: Extension::prepareResponse failure
and this is the output from $_GET:
Array
(
[openid_ns] => http://specs.openid.net/auth/2.0
[openid_mode] => id_res
[openid_return_to] => http://domain.com/register/openid.php
[openid_claimed_id] => https://me.yahoo.com/username#a4a7e
[openid_identity] => https://me.yahoo.com/username
[openid_assoc_handle] =>
eXncxRXNH4wDdDamIbv3BtuAZF0EKJ7wLSONTDJ4KmZWzA6roD6165GfRgpbcTS86aaCJLhdYHNC5fcMHxOd7M9ZyUnPLisioKB9MTZiBvBP7MLuroRHqqVa3S36Ca.c
[openid_realm] => http://domain.com/register/
[openid_response_nonce] =>
2008-11-19T13:54:29ZfrIgw42XFBnGXmjHgD4rL69Eq0vS8byb2w--
[openid_signed] =>
assoc_handle,claimed_id,identity,mode,ns,ns.pape,op_endpoint,pape.auth_policies,pape.nist_auth_level,response_nonce,return_to,signed
[openid_op_endpoint] => https://open.login.yahooapis.com/openid/op/auth
[openid_ns_pape] => http://specs.openid.net/extensions/pape/1.0
[openid_pape_auth_policies] => none
[openid_pape_nist_auth_level] => 0
[openid_sig] => vHXcHwsszQDSki/fNRIixrWS6u4=
)
So it appears to have worked, except claimed_id has the #a4e7e part
extra after the username??
Now for wordpress I go through the motions, come back and get the
following error: Extension::prepareResponse failure (same as Yahoo).
Here is $_GET:
Array
(
[openid_assoc_handle] => {HMAC-SHA1}{4923e2f0}{Wm/HzQ==}
[openid_identity] => http://myusername.wordpress.com/
[openid_mode] => id_res
[openid_return_to] => http://domain.com/register/openid.php
[openid_sig] => BHvUkkAToOKNvU3+3K+OWPTL9l0=
[openid_signed] => mode,identity,return_to
)
Im using Zend Framework 1.7 (latest) with no customisations. Anyone
have any ideas as to why some work and some dont ?
Thanks
Ian