認証実装 OAuth(google)【CFW P2P心理戦ゲーム開発記】 #10

今回はgoogle認証を実装していこうと思います。
大まかな手順としては、Google Cloud Console にアクセスし新規プロジェクトを作成し、OAuth同意画面からウェブアプリケーションの認証を追加。このプロジェクトと今回作っているwebアプリを連携していくという流れになります。

cloud flareworkersで作るwebゲーム、googleのOAuth実装

1. Google Cloud Console

コーディングに入る前に、Google側で「このアプリにログイン機能を使わせてください」という登録(鍵の取得)が必要です。

管理ページのUIは定期的に変わる為、詳細は略しますが、プロジェクト作成→APIとサービス→OAuth 同意画面から設定していきます。(アプリ名や連絡先の設定などを行います)

OAuth作成すると 「クライアント ID」「クライアント シークレット」 が発行されるので、これをメモしておきます。

google cloud 新規プロジェクトの作成

Protocol-99という名前でプロジェクト作成しました

google authの検証用にlocalhostのアドレスを登録

urlの登録(今は開発中なのでローカルホストのurl)

ログイン実装

googleでの認証を実装します。
googleでのログインボタン→google認証ページ→jwtで改ざん対策してログイン認証→データベース登録
といった流れでユーザ登録するようにします。

JWTライブラリのインストール

ログイン成功後、ユーザーに渡す「改ざん不可能なセッション証明書(JWT)」を作るため、Cloudflare Workersの定番ライブラリを一つ導入します。

npm install @tsndr/cloudflare-worker-jwt

認証ページの追加

認証ページへ飛べるようにルートをauthHandler.tsに追加しておきます。

# セキュリティ的観点から、一部の抜粋です。よくある一般的な実装だと思います。 
import jwt from '@tsndr/cloudflare-worker-jwt';

/**
 * 1. ログイン開始:ユーザーをGoogleの認証画面へリダイレクトする
 * GET /api/auth/google/login
 */
export async function handleGoogleLogin(request: Request, env: any): Promise<Response> {
  const authUrl = new URL("https://accounts.google.com/o/oauth2/v2/auth");
  authUrl.searchParams.set("client_id", env.GOOGLE_CLIENT_ID);
  authUrl.searchParams.set("redirect_uri", env.GOOGLE_REDIRECT_URI);
  authUrl.searchParams.set("response_type", "code");
  authUrl.searchParams.set("scope", "openid email profile");
  
  // Googleのログイン画面へユーザーを飛ばす
  return Response.redirect(authUrl.toString(), 302);
}

/**
 * 2. 帰ってきたレスポンスからjwtの検証やDBにすでにいるならログイン、
 *    新規なら登録などの処理をする
 */

index.tsにハンドラを登録します。

import { handleGoogleLogin, handleGoogleCallback } from "./handlers/authHandler";
//上で作ったハンドラ
...

    // ログインボタンを押した時の入り口
    if (url.pathname === "/api/auth/google/login") {
      return await handleGoogleLogin(request, env);
    }

接続テスト

ログインボタンを押して帰ってきてデータベース登録までできるかテストしてみました。
login用ボタンでの接続 127.0.0.1:8787/api/auth/google/login

google authをローカルテスト中。ログインページ
google authをローカルテスト中。ログインページが開けた例

ログインページに飛べることを確認

テストモードで設定したため、テストモード(google cloud console)で登録したユーザで接続しログインできます。ログイン成功したら、既存のポータルページに入れるようになっています。

google認証を利用して登録して、ログイン出来た様子

以前の仮登録ユーザデータベースを完全削除したため、今回登録した1ユーザが登録できています。

google認証を利用して登録してみた

再ログインテスト

アカウント登録はできたので、ログイン情報が保持されるかテストしてみました。最近のブラウザでは、一度ログインした情報をGoogleアカウント側のログインセッション(Cookieなど)が保持されているため、ログインした後、再度 127.0.0.1:8787/api/auth/google/login と打つと勝手にログインしロビーまで入れます。

ブラウザのキャッシュでログイン

・別ウィンドウから再度ログイン

別ウィンドウから同じアカウントにログイン成功

まとめ

今回はgoogleの認証との連携を行いました。これにより、googleアカウントで今回のシステムにログインし、自身のゲームデータにアクセスおよび、外部からのアクセス制限が可能となります。
最終的な実装では、同じアカウントに多重ログイン(スマホとPCそれぞれで同時ログインなど)ができないようにセッション管理する必要がありますが、それは後程、実装することにします。

関連記事

CloudFlare Workersセットアップ
Cloudflare Workersの始め方:Wranglerによるローカル環境構築と世界公開の手順
【第2回】データベースを作る
D1データベース作成とテスト環境構築の手順 【CFW P2P心理戦ゲーム開発記】 #2
【第3回】データベーススキーマ設計
D1データベーススキーマの設計:リレーショナルデータベースとは? 【CFW P2P心理戦ゲーム開発記】 #3
【第4回】ユーザデータベース実装
D1データベース実装:ユーザデータ管理 【CFW P2P心理戦ゲーム開発記】 #4

次回予告

今回の実装で仕組みとしてのログイン認証はできましたが、ユーザ名設定や、ちゃんとしたログイン後のホーム画面などのルーティングができていないので、次回は、ゲームに到達できるまでのベースとなるページルーティングを作っていきます。

次回:関連記事は、2026年6月20日に公開予定 (あと11時間)

ここまで読んでいただきありがとうございます。 では、次の記事で。 lumenHero