gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:05:36 27 4
gpt4 key购买 nike

我正在尝试使用下面的代码向 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com