2011-05-18 7 views
1

OpenIDを実装しようとしていますが、http://www.openidenabled.com/php-openidをダウンロードしてから、ローカルホストディレクトリに変更してAuthフォルダを取得し、index.phpファイルを作成し、そのコードが以下のように:私はworldpressまたはmyopenid.comからIDを記入しようとすると、openid google、yahooなどを実装する方法

<?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); 
    } 
?> 

今すぐに認識され、認証のためのプロバイダのページに私を移すが、これはグーグル、ヤフーや他のサービスプロバイダの場合に起きていません。 GoogleまたはYahoo用に実装する必要があるもの

答えて

3

PHP LightOpenIDライブラリ(see on gitorious)を使用して、自分のGoogleアカウントで自分のウェブサイトにログインできるようにしています。他のOpenIDプロバイダの場合は、$openid->identityフィールドを変更するだけです。私たちのすべての認証フローを処理します。あなたはトークンやものについて心配する必要はありません。

ここで私は、「ログインGoogleとの」リンクを表示ページ:リンクをクリックして、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="<?php echo $openid->authUrl() ?>">Login with Google</a> 

を。

その後、彼は着陸ページ$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にそれらを追加する必要があります。例えば:ユーザが2ページ目にだけでなく、彼の姓と名を取得するには、それを受け入れた場合

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

は、あなたをできるようになる:助け

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

願っています!

+0

私は 'namePerson/first'、 'namePerson/last'を追加しようとしましたが、GoogleやYahooのどちらでも動作していないようです(私は電子メールやその他の値を取得します)。どんな考え? –