当前位置: 首页 > 知识库问答 >
问题:

Google Drive OAuth=>response=临时移动

公孙令秋
2023-03-14
    null

请注意,通过使用Google客户机库,一切工作都很顺利。

我想要实现的是不使用Google客户机库,而是使用这里描述的简单身份验证步骤。

通过使用前面提到的这些身份验证步骤,我发送一个请求:

作为交换,重定向的页面应该包含“code=xxxx”参数,例如:

http://example.com?code=xxx

其中xxx是Google预先准备给上面提到的redirect_uri的授权代码。

这怎么解决?请不要回答“使用谷歌客户端库!”因为我已经说过,通过这样做,它将工作,但我不希望谷歌客户端库依赖!

我的PHP代码是:

$CLIENT_ID = '[the client ID from Google Developer Console]';
$CLIENT_SECRET = '[the client secret from Google Developer Console]';
$REDIRECT_URI = 'http' . ($_SERVER['SERVER_PORT'] == 80 ? '' : 's') . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'];

$ch = curl_init();

if (isset($_GET['code']))
{
    $url = 'https://accounts.google.com/o/oauth2/token';

    $post_fields = 'code=' . $_GET['code'] . '&client_id=' . $CLIENT_ID . '&client_secret=' . $CLIENT_SECRET . '&redirect_uri='
            . $REDIRECT_URI . '&grant_type=authorization_code';
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER,
            array('Host:accounts.google.com', 'Content-Type:application/x-www-form-urlencoded', 'Content-Length:' . strlen($post_fields))
    );

}
else
{
    $url = sprintf('https://accounts.google.com/o/oauth2/auth?scope=email%%20profile&redirect_uri=%s&response_type=code&client_id=%s',
            $REDIRECT_URI, $CLIENT_ID
    );

}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);

$error_no = curl_errno($ch);
curl_close($ch);

echo $result;
?>

共有1个答案

尉迟高澹
2023-03-14
    null
...
else
{
    $url = sprintf('https://accounts.google.com/o/oauth2/auth?scope=email%%20profile&redirect_uri=%s&response_type=code&client_id=%s',$REDIRECT_URI, $CLIENT_ID);
}
...
else
{
    $url = sprintf('https://accounts.google.com/o/oauth2/auth?scope=email%%20profile&redirect_uri=%s&response_type=code&client_id=%s',$REDIRECT_URI, $CLIENT_ID);
    header('Location:'.$url);
}
 类似资料:
  • return Response::make($contents); return Response::make($contents, 200); return Response::json(array('key' => 'value')); return Response::json(array('key' => 'value')) ->setCallback(Input::get('callba

  • 主要内容:示例,删除临时表关系型数据库支持临时表,这是一项很棒的功能。临时表的概念由 SQL Server 引入,用来存储和处理中间结果。 临时表在会话期间创建,会话结束后自动被删除。临时表可以和普通表一样执行各种操作,比如 SELECT、UPDATE、INSERT、JOIN 等。 MySQL 3.23 及其更高版本才支持临时表,如果您使用的 MySQL 版本低于 3.23,则不能使用临时表,但可以使用堆表(Heap Ta

  • 一、简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发的过程中我们并不需要关注它们的存在。尽管如此,如果能对这些临时文件的产生机制和应用场景有着很好的理解,那么对我们今后应用程序的优化和维护都是极有帮助的。在SQLite中主要产生以下七种临时文件,如: 1). 回

  • 上传的临时多媒体文件有格式和大小限制,如下: 图片(image): 2M,支持 JPG 格式 语音(voice):2M,播放长度不超过 60s,支持 AMR\MP3 格式 视频(video):10MB,支持 MP4 格式 缩略图(thumb):64KB,支持 JPG 格式 上传图片 {warning} 注意:微信图片上传服务有敏感检测系统,图片内容如果含有敏感内容,如色情,商品推广,虚假信息等,上

  • 据我所知,Herokus Ephemeral文件系统只允许您写入临时文件夹。当停止或重新启动创建文件的测功机时,该文件夹中创建的文件将被丢弃。 我不明白的是,如果dyno没有停止或重新启动会发生什么?一段时间后,文件还会被丢弃吗? 我们目前正在构建一个系统,该系统可以生成pdf文件并通过邮件转发(或者您可以下载该文件)。在发送/下载pdf文件后,我是否需要自己删除它们,或者我可以依靠Heroku自

  • 这是我编写的获取并尝试发送推送通知的内容: 我得到的结果是这样的,为什么 提前感谢您的帮助!