作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用下面的代码向 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, '-_,', '+/='));
}
向 google 发出 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/
我是一名优秀的程序员,十分优秀!