5

私は混乱しています。

LightOpenIDを使用して、openid ログインを機能させることができました。

私がそれをするのはopenid_identity、「」などだけhttps://www.google.com/accounts/o8/id?id=xxxです。かなりがっかり: メールアドレスももらえると思っていたのに。

つまり、ログインする必要があり(これが openid の機能です) ユーザーがログインに使用した Google アカウントのメール アドレスを知る必要があります。

関数はありますが、そこ$openid->getAttributes()から得られるのは空の配列だけです。Googleはそれ以外に何も与えてくれないと思いますopenid_identity

だから私は使うことになっていると思いますよOAuth?私はそれについて無知です。私は、すべてを説明するふりをしている(そして私すべてを意味している)か、何も説明していない、恐ろしくて混乱したドキュメントしか見つけません でした

はい、もちろん、Google で検索したのと同じように、それに関する以前の投稿を見ようとしました。上記の段落をもう一度読んでください。

4

4 に答える 4

10

LightOpenIDを発見したばかりで、素晴らしいと思います。の次の変更を使用して、電子メールアドレス、姓名、優先言語を取得できましたexample-gmail.php

<?php

require_once('openid.php');

if (empty($_GET['openid_mode']))
{
    if (isset($_GET['login']))
    {
        $openid = new LightOpenID();
        $openid->identity = 'https://www.google.com/accounts/o8/id';
        $openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language');

        header('Location: ' . $openid->authUrl());
        //header('Location: ' . str_replace('&amp;', '&', $openid->authUrl()));
    }

    else
    {
        echo '<form action="?login" method="post">' . "\n";
        echo '<button>Login with Google</button>' . "\n";
        echo '</form>' . "\n";
    }
}

else if ($_GET['openid_mode'] == 'cancel')
{
    echo 'User has canceled authentication!';
}

else
{
    $openid = new LightOpenID();

    echo 'User ' . ($openid->validate() ? $_GET['openid_identity'] . ' has ' : 'has not ') . 'logged in.';

    echo '<pre>';
    print_r($openid->getAttributes());
    echo '</pre>';
}

?>

コードを変更して、もう少し読みやすくしました。出力は次のとおりです。

User https://www.google.com/accounts/o8/id?id=*** has logged in.

Array
(
    [namePerson/first] => Alix
    [contact/email] => ***@gmail.com
    [pref/language] => en
    [namePerson/last] => Axel
)

私はまだ郵便番号などを Google から取得できませんが、myOpenID.comで成功しました。

于 2010-07-14T07:00:30.220 に答える
5

OpenID の属性交換を使用できます。こちらの Google ドキュメントを参照してください(特にopenid.ax.type.email)。

于 2010-07-13T23:21:30.640 に答える
1

Google アカウントを持っていても、Gmail アカウントを取得できるわけではありません。任意のメール アドレスで Google アカウントを開始できます

とは言っても、ID の一部として電子メール アドレスやログイン データを返すことは、仕様の一部ではないと思います。

于 2010-07-13T23:09:00.000 に答える
1

OAuth と OpenID は同じではありません。それらはまったく異なるものを解決します。私はあなたがチェックアウトしたと仮定しています: Federated Login for Google Account Usersには、アカウントが Google アカウントでどのように機能するかについてもう少し説明があります。

ソリューション:

  1. これは Python ですが、PHP に合わせて調整できるはずです。
  2. これは .Net にあります。ここでも、AX モードを自分で変更できるはずです。
于 2010-07-13T23:20:07.320 に答える