Search code examples
phpopenidyahooyahoo-apilightopenid

Yahoo open id login api


Im new to open id, but still i have tried to integrate the open id in my website. Im using yahoo provider to login in to my website. Could any help me in getting the user information like yahoo mail id , first name , last name.

I have take the below code from a website which is provided for google, i have changed the provider to yahoo

Code which i have tried:

<?php
# Logging in with Google accounts requires setting special identity, so this example shows how to do it.
require 'openid.php';
try {
# Change 'localhost' to your domain name.
$openid = new LightOpenID('localhost');
if(!$openid->mode) {
if(isset($_GET['login'])) {
$openid->identity = 'https://me.yahoo.com';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Yahoo</button>
</form>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
print_r($openid->ax_to_sreg);
}
} catch(ErrorException $e) {
echo $e->getMessage();
}

After loggin im getting out put like this :

User https://open.login.yahooapis.com/openidx20/user_profile/XXXX has logged in.

what is the use of above url? How can i fetch the user information?


Solution

  • After googling a lot find my solution. Now im able to fetch the email of logged in user

    Here is the modified code :

    <?php
    
    
    require 'openid.php';
    
    try
    {
        # Change 'localhost' to your domain name.
        $openid = new LightOpenID($_SERVER['HTTP_HOST']);
    
        //Not already logged in
        if(!$openid->mode)
        {
    
            //do the login
            if(isset($_GET['login']))
            {
                //The google openid url
                $openid->identity = 'https://me.yahoo.com';
    
                //Get additional google account information about the user , name , email , country
                $openid->required = array('contact/email' , 'namePerson/first' , 'namePerson/last' , 'pref/language' , 'contact/country/home');
    
                //start discovery
                header('Location: ' . $openid->authUrl());
            }
            else
            {
                //print the login form
                login_form();
            }
    
        }
    
        else if($openid->mode == 'cancel')
        {
            echo 'User has canceled authentication!';
            //redirect back to login page ??
        }
    
        //Echo login information by default
        else
        {
            if($openid->validate())
            {
                //User logged in
                $d = $openid->getAttributes();
    
                $first_name = $d['namePerson/first'];
                $last_name = $d['namePerson/last'];
                $email = $d['contact/email'];
                $language_code = $d['pref/language'];
                $country_code = $d['contact/country/home'];
    
                $data = array(
                    'first_name' => $first_name ,
                    'last_name' => $last_name ,
                    'email' => $email ,
                );
    
                //now signup/login the user.
                print_r($data);
            }
            else
            {
                //user is not logged in
            }
        }
    }
    
    catch(ErrorException $e)
    {
        echo $e->getMessage();
    }
    
    /*
        This function will print the login form with the button
    */
    function login_form()
    {
    ?>
    <a href="?login">Login with Yahoo</a>
    <?php
    }