2017-01-17 7 views
0

GOOGLEのOAuth 2.0が好きです。シンボル "#"の後にGETによって値が渡されるのはどうですか?

私は開く:

https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=token&redirect_uri=MYWEB&client_id=MYID.apps.googleusercontent.com 

は、私は正確に取得:

MYWEB/#access_token=BEAUTIFULL.TOKEN&token_type=Bearer&expires_in=3600&authuser=0&hd=MYEMAIL&session_state=BEAUTIFULL.SESSION&prompt=none 

私は(GOOGLEが有効なトークンに与える!)、Googleはこの四つのパラメータ私に与えるもののためにunknow:

authuser = 0 
hd = MYEMAIL 
session_state = BEAUTIFULL.SESSION 
prompt = none 

しかし、もっと重要なのは(私の記事の実際の動機):

です

PHP GOOGLEの回答に "#"という記号が含まれているので、このサーバーを使用しないでください。サーバー/ PHPはこの値を使用しません。

シンボル「#」の後に、どのように$ _SERVER ['QUERY_STRING'](var =>値)を得ることができますか?

論理的にGOOGLEはこれを知っています "#"応答を取らないようにしてください、そして、なぜ、このシンボルは答えにありますか?

ありがとうございます!

答えて

0

関数explode()は、指定された文字で区切られ、各部分を配列に格納します。これを使用して文字列を分離し、最初に&で各キー/値のペアを取得することができます。次に、=によって、キーを値から分離します。

だから、これはあなたのために働く必要があります。

$input = 'MYWEB/#access_token=BEAUTIFULL.TOKEN&token_type=Bearer&expires_in=3600&authuser=0&hd=MYEMAIL&session_state=BEAUTIFULL.SESSION&prompt=none'; 
print_r(getGetVars($input)); 

function getGetVars($string){ 
    $output = Array(); 

    // find # 
    if(!$hashPos = strpos($string, '#')) return 'error: # not found'; 

    // trim string to only include text after # 
    $string = substr($string, $hashPos + 1); 

    // break string apart by & 
    $keysAndVals = explode('&', $string); 

    foreach($keysAndVals as $keyValString){ 
     // seperate key and value on each side of = 
     $keyValArray = explode('=', $keyValString); 

     $key = $keyValArray[0]; 
     $val = $keyValArray[1]; 

     $output[$key] = $val; 
    } 

    return $output; 
} 
+0

ではありません「$入力= XXX」を可能行い、値はスクリプトになし、$ _GETに存在する!だけの問題では何の爆発んか」ではありません"、私の問題は$ _GETからの値を取得することです。 – Stackoverflow

+0

申し訳ありませんが、私はあなたが言っていたことを誤解していたと思います。あなたが「xxxに行くとき」とはどういう意味ですか? – BizzyBob

+0

ありがとうございますBB、情報が存在します:$ _GET、いいえSCRIPTにあります。 – Stackoverflow

関連する問題