2011-01-01 5 views
1

Iamはログインシステムとしてphpプロジェクトでlightopenidを使用し、ユーザーが認証を取り消して自分のサイトに戻った後、どのサイトから認証をキャンセルしたかを知りたい。Openid get Provider

私はPHP HTTP_REFERERを試しましたが、実際のサイトのURLを取得することはできません。 ユーザーがyahoo認証ページから来たとします。私はそれがyahooのURLであることを知りたいと思います。

これをどのように達成できますか? 基本的に私は、PHPで前のページのURLを取得する方法を知りたい場合は、それが動作します。

答えて

2

あなた本当には、あなたがそのようなこと行うことができますする必要がある場合:

if($openid->mode == 'cancel') { 
    $openid->identity = $_GET['identifier']; 
    echo 'User has canceled authentication! ' 
     . 'The authentication url was ' . $openid->authUrl(); 
} 

をアイデアが主張を送信するために、プロバイダを強制することです:ユーザーがキャンセルしたときに、その後

if(isset($_POST['openid_identifier'])) { 
    $openid->identity = $_POST['openid_identifier']; 
    $openid->returnUrl .= '?identifier=' . urlencode($openid->identity); 
    header('Location: ' . $openid->authUrl()); 
} 

を戻りURLを介して識別子。次に、この識別子に対して$ openid-> authUrl()を呼び出して、ユーザをリダイレクトしたURLを取得することができます。

しかし、なぜあなたはそれをしたいと思いますか?もしあなたがなぜこれを必要としているのかを記述すれば、もっと良い解決策があるでしょうか?

+0

こんにちは、お返事ありがとうございます。私は識別子を$ _GET ['openid_identity']で取得でき、google、yahoo、AOLの文字列を解析することができます。しかし、今私が心配しているのは、ハッカーが手動でurlの文字列を入力できるということです。おそらく私はurlのパラメータをもっと調べる必要があります。 –

+1

もちろん、それは可能ですが、なぜあなたは気にしますか? – Mewp

+0

はい、私はそれについて心配する必要はありません...彼らはユーザーデータを盗むことができませんでした! –

0

できない場合はできません。

OpenIDプロバイダにリダイレクトします。つまり、ユーザーのOpenIDプロバイダは既に分かっています。それ以降に起こることは、OpenID仕様の範囲外のです。まで、ユーザーのブラウザは、認証リクエストに対する応答が来ると予想されるURLをリクエストします。このリクエストが来たら、共有秘​​密とユーザーのセッションはどちらもOpenIDプロバイダが使用された良いヒントです。

関連する問題