Как да внедрим openid google, yahoo и др

Опитвам се да внедря OpenID и за това изтеглям http://www.openidenabled.com/php-openid и от това взех папка Auth с промяна на каквото и да е в директория localhost и създадох файл index.php, чийто код е както по-долу:

<?php
    if (!isset($_POST['submit'])) {
?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
        <title>OPENID TESTING</title>
        </head>
        <body>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            Sign in with your OpenID: <br/>
            <input type="text" name="id" size="30" />
            <br />
            <input type="submit" name="submit" value="Log In" />
        </form>
        </body>
        </html>
<?php
    } else {

        // check for form input
        if (trim($_POST['id'] == '')) {
            die("ERROR: Please enter a valid OpenID.");
        }

        // include files
        require_once "Auth/OpenID/Consumer.php";
        require_once "Auth/OpenID/FileStore.php";

        // start session (needed for YADIS)
        session_start();

        // create file storage area for OpenID data
        $store = new Auth_OpenID_FileStore('./oid_store');

        // create OpenID consumer
        $consumer = new Auth_OpenID_Consumer($store);

        // begin sign-in process
        // create an authentication request to the OpenID provider

        $auth = $consumer->begin($_POST['id']);
        if (!$auth) {
            die("ERROR: Please enter a valid OpenID.");
        }

        // redirect to OpenID provider for authentication
        $url = $auth->redirectURL('http://localhost/', 'http://localhost/oid_return.php');
        header('Location: ' . $url);
    }
?>

Сега, когато се опитам да попълня идентификационен номер от worldpress или myopenid.com, се разпознава и ме прехвърля към страницата на доставчика за удостоверяване, но това не се случва с Google, yahoo или други доставчици на услуги. Какво трябва да внедря за Google или Yahoo


person Vineet1982    schedule 18.05.2011    source източник


Отговори (1)


Използвам библиотеката PHP LightOpenID (вижте за gitorious), за да позволя на потребителите да влизат моя уебсайт с техния акаунт в Google. За друг доставчик на OpenID просто трябва да промените полето $openid->identity. Той обработва целия поток на удостоверяване вместо нас. Не е нужно да се притеснявате за жетон и други неща.

Ето страницата, на която показвам връзката „Влезте с Google“:

<?php
require_once 'openid.php';
$openid = new LightOpenID;

$openid->identity = 'https://www.google.com/accounts/o8/id';
$openid->required = array('contact/email');
$openid->returnUrl = 'http://my-website.com/landing-login.php'
?>

<a href="/bg<?php echo $openid->authUrl() ?>">Login with Google</a>

Когато щракнете върху връзката, ще се появи страница на Google, която ще го помоли да удостовери и/или ви упълномощи да извлечете имейла му.

След това той ще бъде пренасочен към целевата страница $openid->returnUrl. Кодът за тази страница трябва да бъде:

<?php
require_once 'openid.php';
$openid = new LightOpenID;

if ($openid->mode) {
    if ($openid->mode == 'cancel') {
        // User has canceled authentication
    } elseif($openid->validate()) {
        // Yeah !
        $data = $openid->getAttributes();
        $email = $data['contact/email'];
    } else {
        // The user has not logged in via Google
    }
} else {
    // The user does not come from the link of the first page
}
?>

Ако искате да извлечете повече информация от потребителя, трябва да го добавите към $openid->required на първата страница. Например :

$openid->required = array(
  'contact/email',
  'namePerson/first',
  'namePerson/last'
);

ще ви позволи, ако потребителят го приеме, да получите и неговото име и фамилия на втората страница:

$name = $data['namePerson/first'] . " " . $data['namePerson/last'];

Надявам се това да помогне!

person Quentin    schedule 30.05.2011
comment
Опитах се да добавя 'namePerson/first', 'namePerson/last' Изглежда не работи нито с google, нито с Yahoo (получавам имейла и други стойности). Някаква идея защо? - person Itay Moav -Malimovka; 08.08.2013