2011-02-09 11 views
3

POSTメソッドを使用してLightOpenIDライブラリを使用して認証する方法はありますか?厳密に言えば、認証後、Googleは指定されたURLに戻りますが、GETメソッドを使用してすべてのデータが私に送信されますが、これは醜い長いURLで終わります。POSTメソッドを使用したLightOpenID認証

私のコードは次のとおりです。次のようになりますURLに認証OP戻った後ので

define('BASE_URL', 'http://someurl.com'); 

try { 
    $openid = new LightOpenID(); 

    if (!isset($_GET['openid_mode'])) { 
     // no openid mode was set, authenticate user 
     $openid->identity = 'https://www.google.com/accounts/o8/id'; 
     $openid->realm = BASE_URL; 
     $openid->required = array('contact/email'); 

     header('Location: '.$openid->authUrl()); 

    } else if ($_GET['openid_mode'] == 'cancel') { 
     // user canceled login, redirect them 
     header('Location: '.BASE_URL); 

    } else { 
     // authentication completed, perform license check 
     if ($openid->validate()) { 
      $openid->getAttributes(); 
     } 
    } 

} catch (ErrorException $e) { 

} 

http://someurl.com/index.php?openid.ns=http://specs.openid.net/auth/2.0&openid.mode=id_res&openid.op_endpoint=https://www.googl... 

そして、私はOPがに戻りたい:

http://someurl.com/index.php 

を入力し、POSTを使用せずにすべてのデータを送信してください。

+0

あなたの主な関心事はURLがすばらしく見える場合は、すべてのデータを取得した後、エンドポイントを正常なものにリダイレクトさせるだけです。 LOIDはPOSTをサポートしていますが、私はすべてのOIDプロバイダが非常に柔軟性があるとは思っていません。 – tadamson

+0

私はGoogleがそれをサポートするべきだと思う。 POSTを使用するためにLOIDでどのように指定しますか? – MeanEYE

答えて

1

私は同じことをしてきました。以下のコードを参照してください。私はこれが助けるべきだと思う。

<?php 
require 'lightopenid/openid.php'; 
try { 
    $openid = new LightOpenID;      
    if(!$openid->mode) { 
     if(isset($_GET['login'])) { 
      $openid->identity = 'https://www.google.com/accounts/o8/site-xrds?hd=yourdomain.com';   
     $openid->required = array('namePerson/friendly', 'contact/email' , 'contact/country/home', 'namePerson/first', 'pref/language', 'namePerson/last'); 
      header('Location: ' . $openid->authUrl());  
     } 
?> 
<form action="?login" method="post"> 
    <button>Login with Google</button> 
</form> 
<?php 
    } elseif($openid->mode == 'cancel') { 
     echo 'User has canceled authentication !'; 
    } else { 
     session_start(); 
     $fname = $openid->ret_fname();      // setting session 
     $lname = $openid->ret_lname();      // setting session 
     $email = $openid->ret_email();      // setting session 
     $_SESSION['admin']['name'] = $fname.' '.$lname;  // setting session 
     $_SESSION['admin']['emailID'] = $email;    // setting session 

     header('Location:approve.php'); // PUT YOUR PAGE/URL HERE.... I THINK THIS SHOULD DO THE TRICK !!! 
    } 
} catch(ErrorException $e) { 
    echo $e->getMessage(); 
} 
+0

これは、ユーザーがログインすると、GETの代わりにPOSTメソッドを使用してすべてのデータを返しますか? – MeanEYE

+0

'$ fname = $ openid-> ret_fname(); $ lname = $ openid-> ret_lname(); $ email = $ openid-> ret_email(); ' fname、lname、emailのすべての値は、これらのPHP変数で得られます。今あなたはあなたのようにそれらを使用することができます。私はあなたのセッションでそれらを設定することを好む。 –

0

それはこの質問への一番上の回答によると、不可能であることが可能です:Response.Redirect with POST instead of Get?

バックページハンドラにGoogleからの認証応答が「要求」ではなくなるかもしれません"リダイレクト"だから私はまだよくわからない。

上記のようにPOSTを使用して応答した後に自分自身をリダイレクトすると、良い回避策のようです。

もう1つの解決策は、AJAXを使用してプロセス全体を埋め込むことです。

関連する問題