Google Cloud Console側設定
Google Cloud Consoleを開き、「新しいプロジェクト」をクリック
プロジェクト名を入力し、「作成」をクリック
「APIとサービス」をクリック
「認証情報」をクリック
「認証情報を作成」をクリック
「OAuthクライアントID」をクリック
「ウェブアプリケーション」をクリック
Googleログイン承認後、リダイレクトしてもらう自サイトのURLを入力し、「作成」をクリック
「クライアントID」と「クライアントシークレット」をコピーして「OK」をクリック
Laravel側
Socialiteをインストール
composer require laravel/socialite
Google認証情報を設定
config/services.phpに以下の情報を追加
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT_URI'),
],
.envファイルに以下を追加
GOOGLE_CLIENT_ID=さきほど取得したクライアントID
GOOGLE_CLIENT_SECRET=さきほど取得したクライアントシークレット
GOOGLE_REDIRECT_URI=承認済みのリダイレクトURI
Googleログイン用のルートを作成
routes/web.phpに以下を追加
use App\Http\Controllers\Auth\GoogleController;
・
・
・
Route::get('auth/google', [GoogleController::class, 'redirectToGoogle']);
Route::get('auth/google/callback', [GoogleController::class, 'handleGoogleCallback']);
Googleログイン用のコントローラーを作成
app/Http/controllers/AuthフォルダにGoogleContoroller.phpを新規作成して中身を以下とする。
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
class GoogleController extends Controller
{
public function redirectToGoogle()
{
return Socialite::driver('google')->redirect();
}
public function handleGoogleCallback()
{
$googleUser = Socialite::driver('google')->stateless()->user();
// ユーザーが存在するか確認
$user = User::where('email', $googleUser->email)->first();
if (!$user) {
// ユーザーが存在しない場合は作成
$user = User::create([
'name' => $googleUser->name,
'email' => $googleUser->email,
'google_id' => $googleUser->id,
]);
}
// ログイン処理
Auth::login($user);
return redirect('/'); // ログイン後のリダイレクト先
}
}
ユーザー管理用のテーブルを追加
以下のSQLを実行してusersテーブルを作成
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
CREATE TABLE `users` (
`id` bigint UNSIGNED NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`google_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`email_verified_at` timestamp NULL DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`two_factor_secret` text COLLATE utf8mb4_unicode_ci,
`two_factor_recovery_codes` text COLLATE utf8mb4_unicode_ci,
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`current_team_id` bigint UNSIGNED DEFAULT NULL,
`profile_photo_path` varchar(2048) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `users_email_unique` (`email`);
ALTER TABLE `users`
MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;
Googleアカウントログインテスト
Googleログイン用URLにアクセス
https://xxxxxxxx.ne.jp/yyyyyy/public/auth/google
Googleログインページが表示される。
ログインしたGoogleアカウントの情報がusersテーブルにinsertされ、正常にGoogleアカウント認証が行われた。