php - 如何将参数添加到 google oauth 2

标签 php laravel google-api google-oauth google-api-php-client

我正在尝试使用下面的代码向 google oAuth 发出授权请求

$client = new Google_Client();
$client->setClientId('qweqweqweqwe');
$client->setClientSecret('vQWsd1Geweqweqweqwe');
$client->setRedirectUri('http://localhost/test1');

$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setScopes(['https://www.googleapis.com/auth/gmail.readonly']);

if (request()->has('code')) {

    $credentials = $client->authenticate(request('code'));

    dd($credentials);

}

它可以工作,但我的问题是:有没有办法在请求中添加用户 ID 并在回调时取回它?

最佳答案

添加该参数的一个非常好的观点也可以防止 csrf 攻击。

在 google 授权请求中添加参数,然后在 google 的回调请求中取回参数的方法是设置一个 base64 编码的 json 负载:

在生成授权 url 之前首先包含两个函数来编码和解码 url 参数,简单:

public function base64UrlEncode($inputStr)
{
    return strtr(base64_encode($inputStr), '+/=', '-_,');
}


public function base64UrlDecode($inputStr)
{
    return base64_decode(strtr($inputStr, '-_,', '+/='));
}

向 go​​ogle 发出 oauth 请求,使 url 参数示例:

$params = base64UrlEncode('{ "a" : "b" , "c" : 1 }');

在 Google Client 类中有一个函数 setState($state),您需要在创建 url 之前调用该函数并将 $params 作为参数传递,例如:

$client = new Google_Client();
$client->setClientId('qweqweqweqwe');
$client->setClientSecret('vQWsd1Geweqweqweqwe');

$params = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
$client->setState($params);

$client->setRedirectUri('http://localhost/test1');

然后响应将具有状态请求参数,因此在回调路由中执行:

Route::get('/callback', function(){


  $state = request()->get('state');    // GET['state'];
  $state = base64_decode(strtr($state, '-_,', '+/='));
  dd($state); // will output your params 
});

这个答案有点基于: here

关于php - 如何将参数添加到 google oauth 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914519/

相关文章:

php - 我正在尝试刷新 PHP 变量

PHP 数组——方括号与花括号($array[$i] 与 $array{$i})

调试 Laravel 5 工匠迁移意外 T_VARIABLE FatalErrorException

php - 如何使用动态id制作多个ajax触发器

asp.net - 在 asp.net C# Web 应用程序中翻译其他语言的文本

php - 将用户重定向到另一个页面后如何运行 php 函数?

mysql - Laravel 连接表和连接行

java - Google Drive API 给予上传文件的权限不足

php - 在 session 中保存 OAuth token 是否正确?

php - ON DUPLICATE UPDATE 不适用于某些行