0

登录.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 服务器的示例返回。

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

为什么用数字符号将查询字符串与文件路径分开?是因为我没有使用 https 模式并且它在惩罚我吗?

4

1 回答 1

1

不,它被称为 URL 的“哈希”。对于从服务器到客户端的响应(反之亦然),这是一种常见的方案。例如,Facebook OAuth 2.0 也使用了这种技术。只要习惯它,并从井号开始解释响应。

于 2012-06-19T17:11:31.847 回答