Socialiteで特定のGoogleアカウントで可能なログイン機能を実装したのですが、それとは別にGoogleアカウントの登録機能を実装する必要があり、少しつまづいたのでメモ。
config/services.phpに記述するプロバイダのリダイレクト先URLは一つしかできないので、どうやって複数のリダイレクト先を設定するか悩みました。
環境
Laravel Framework 9.35.1
解決策
まずGoogle Cloud Platformで新たなリダイレクト先URLを登録。
config/services.php
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_CALLBACK_URL'),
]
services.phpには使用する頻度の高いリダイレクト先URLを設定しておく。
RegisterAccountController.php
public function redirectToGoogle()
{
config(['services.google.redirect' => env('ANOTHER_GOOGLE_CALLBACK_URL')]);
return Socialite::driver('google')->redirect();
}
Googleにリダイレクトする際に、ヘルパ関数config()をつかって一時的にredirectを書き換え。
RegisterAccountController.php
public function getUserData()
{
config(['services.google.redirect' => env('ANOTHER_GOOGLE_CALLBACK_URL')]);
$user = Socialite::driver('google')->stateless()->user();
}
Googleからユーザーデータを受け取る際にも一時的にredirectを書き換える。
これで、ログインフォームとは別にGoogleユーザーの情報を受け取ることが可能になります!