以下のコードを使用して、googleoAuthで承認リクエストを作成しようとしています
$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パラメータをエンコードおよびデコードする2つの関数を含めます。簡単です。
public function base64UrlEncode($inputStr)
{
return strtr(base64_encode($inputStr), '+/=', '-_,');
}
public function base64UrlDecode($inputStr)
{
return base64_decode(strtr($inputStr, '-_,', '+/='));
}
Googleにoauthリクエストを作成し、urlparamsの例を作成します。
$params = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
Googleクライアントクラスには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
});
この回答は、以下に基づいています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加