如何向谷歌oauth 2添加一个参数

时间:2018-02-21 20:04:43

标签: 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并将其恢复回调?

3 个答案:

答案 0 :(得分:1)

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

如何在谷歌授权请求中添加参数,然后从谷歌回复请求回调请求,方法是设置base64编码的json有效负载:

在生成Authorization url之前,首先要包含两个函数来编码和解码url params,简单:

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


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

向Google发出oauth请求,请使用url params示例:

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

在Google Client类中,您需要在创建网址之前调用函数setState($state),并将$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

答案 1 :(得分:0)

您可以使用state通过Google_Client::setState()发送自定义参数。

设置客户时:

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

在回调中,参数将在state到GET:

var_dump($_GET["state"]); // test=value

您可以随意发送任何内容,因此如果数据过于复杂,请尝试json_encode()url_encode()您的数据。

答案 2 :(得分:-1)

您可以将用户ID添加到回拨网址:

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