Add Login with Yahoo to your php website

Yahoo OpenId

In the previous article, we learned how to integrate google login using openid in php. Its good to know that Yahoo is also an openid provider and "Login with Yahoo" can be added to a website in a very similar manner. Yahoo's openid discovery url is http://me.yahoo.com/. The rest of the code is very simple.

Code

<?php
/*
The following code example demonstrates, how to implement "Login with Yahoo"
feature in a website. It uses OpenId.

lightopenid library

download :
http://gitorious.org/lightopenid
*/

require '/var/www/lib/lightopenid/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
}

The above page will present the user with a link for "Login with Yahoo". When the user clicks the link, he/she is taken to yahoo.com where they have to login(if they are not already), and then allow/deny Yahoo to provide information to the requesting website. If they allow, then their details are provided to the requesting website in GET parameters.







Register and Login

Once the details of the user are available, next thing is to register him on the system and log him in. If the email address is already registered, then just proceed with the login without any registration.

Last Updated On : 12th July 2012

Subscribe to get updates delivered to your inbox

4 Comments + Add Comment

  • By above code I am getting my Profie Information.Please give me a code to get my yahoo contact emails.

  • Why the firstname and lastname is empty? it return only the email. not the firstname and lastname or fullname .

  • Thank you for this article.
    It helped me to include Login with Yahoo in website.

  • Please go through this url for login with yahoo oauth in php

    http://www.idiotminds.com/login-with-yahoo-oauth-in-php/

Leave a comment