端くれプログラマの備忘録 Laravel [Laravel] Googleアカウントでログインする

[Laravel] Googleアカウントでログインする

LaravelでGoogleアカウントでログインする機能を実装するには、Laravel Socialiteというパッケージを使用するのが簡単です。以下に手順を説明します。

1. Laravel Socialiteのインストール

まず、Laravel Socialiteパッケージをインストールします。

composer require laravel/socialite

2. Google APIクライアントIDとシークレットの取得

前述の手順でGoogle Cloud Consoleでプロジェクトを作成し、OAuth 2.0クライアントIDとクライアントシークレットを取得します。

3. 環境設定

.envファイルにGoogleのクライアントIDとシークレットを追加します。

GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URL=https://yourapp.com/auth/google/callback

4. Socialite設定の追加

config/services.phpファイルにGoogleの設定を追加します。

'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => env('GOOGLE_REDIRECT_URL'),
],

5. 認証ルートの設定

routes/web.phpに認証ルートを追加します。

use App\Http\Controllers\Auth\GoogleController;

Route::get('auth/google', [GoogleController::class, 'redirectToGoogle']);
Route::get('auth/google/callback', [GoogleController::class, 'handleGoogleCallback']);

6. GoogleControllerの作成

以下のコマンドでコントローラを作成します。

php artisan make:controller Auth/GoogleController

app/Http/Controllers/Auth/GoogleController.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
{
    /**
     * Redirect the user to the Google authentication page.
     *
     * @return \Illuminate\Http\Response
     */
    public function redirectToGoogle()
    {
        return Socialite::driver('google')->redirect();
    }

    /**
     * Obtain the user information from Google.
     *
     * @return \Illuminate\Http\Response
     */
    public function handleGoogleCallback()
    {
        $googleUser = Socialite::driver('google')->stateless()->user();

        $user = User::updateOrCreate(
            ['email' => $googleUser->getEmail()],
            [
                'name' => $googleUser->getName(),
                'google_id' => $googleUser->getId(),
                'avatar' => $googleUser->getAvatar()
            ]
        );

        Auth::login($user);

        return redirect()->intended('dashboard');
    }
}

7. ユーザーモデルの編集

app/Models/User.phpファイルを以下のように編集して、新しいフィールドを追加します。

protected $fillable = [
    'name',
    'email',
    'password',
    'google_id',
    'avatar',
];

8. マイグレーションの作成

google_idavatarカラムを追加するためにマイグレーションを作成します。

php artisan make:migration add_google_id_to_users_table --table=users

マイグレーションファイルを以下のように編集します。

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('google_id')->nullable();
        $table->string('avatar')->nullable();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('google_id');
        $table->dropColumn('avatar');
    });
}

マイグレーションを実行します。

php artisan migrate

9. 認証ビューの設定

ユーザーがGoogleログインを開始できるように、ログインビューにリンクを追加します。

<a href="{{ url('auth/google') }}">Login with Google</a>

10. 動作確認

すべての手順が完了したら、アプリケーションを起動して、Googleアカウントでログインできることを確認します。

これで、LaravelでGoogleアカウントを使用した認証が実装されます。