0

login.php

<?php
    define('client_id', 'cid');
    define('redirect_uri', 'http://domain.tld/file.php');
    define('client_secret', 'secret');


    $endpoint = 'https://accounts.google.com/o/oauth2/auth';
    $querystr = array(
        'response_type' => 'token',
        'client_id' => client_id,
        'redirect_uri' => redirect_uri,
        'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile',
#       'state' => $_SERVER['REQUEST_URI']
    );


    if (isset($_GET['access_token']))
        print_r($_GET);
    else
        header('Location: ' . $endpoint . '?' . http_build_query($querystr));

?>

上記のコードは正常に動作します。問題は、Google からの応答が適切に形成されていないことです。私が取得しているクエリ文字列は、疑問符?で始まっていません。番号記号で始まってい#ます。以下は、Google のサーバーから返される例です。

http://domain.tld/file.php#access_token=ya29.AHES6ZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno&token_type=Bearer&expires_in=3600

クエリ文字列とファイル パスがシャープ記号で区切られているのはなぜですか? 私は https スキーマを使用しておらず、それが私を罰しているからですか?

4

1 に答える 1

1

いいえ。URLの「ハッシュ」と呼ばれます。サーバーからクライアントへの応答(およびその逆ではない)の場合、これは一般的なスキームです。たとえば、FacebookOAuth2.0もこの手法を使用しています。それに慣れて、ハッシュ記号から始まる応答を解釈してください。

于 2012-06-19T17:11:31.847 に答える