Laravel10 Googleアカウントでログインする方法

Google Cloud Console側設定

Google Cloud Consoleを開き、「新しいプロジェクト」をクリック

Google Cloud Console
Google Cloud Console プロジェクト選択

プロジェクト名を入力し、「作成」をクリック

Google Cloud Console プロジェクト新規作成

「APIとサービス」をクリック

Google Cloud Console APIとサービス

「認証情報」をクリック

Google Cloud Console APIとサービス 認証情報

「認証情報を作成」をクリック

Google Cloud Console APIとサービス 認証情報を作成

「OAuthクライアントID」をクリック

Google Cloud Console APIとサービス 認証情報を作成 OAuthクライアントID

「ウェブアプリケーション」をクリック

Google Cloud Console APIとサービス 認証情報を作成 OAuthクライアントID ウェブアプリケーション

Googleログイン承認後、リダイレクトしてもらう自サイトのURLを入力し、「作成」をクリック

Google Cloud Console APIとサービス 認証情報を作成 OAuthクライアントID ウェブアプリケーション 承認済みリダイレクトURI設定

「クライアントID」と「クライアントシークレット」をコピーして「OK」をクリック

Google Cloud Console APIとサービス 認証情報を作成 OAuthクライアント作成完了

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ログイン アカウント選択

ログインしたGoogleアカウントの情報がusersテーブルにinsertされ、正常にGoogleアカウント認証が行われた。

Laravel usersテーブル

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です