Google Cloud OAuth
บทนี้จะแนะนำวิธีตั้งค่า Google OAuth สำหรับระบบ Login ด้วย Google Account ซึ่งเป็นส่วนสำคัญของ Vibe Coding Boilerplate
Google Cloud Project สามารถสร้างทีเดียว (Project เดียว, App เดียว)และใช้ซ้ำกันในหลาย ๆ Project Vibe Coding ของเราได้
ทำความเข้าใจโครงสร้าง Google Cloud Project
Google Cloud Project 1 อัน มีได้แค่ 1 Application เช่น Quotation Project = Quotation App
แต่ 1 Application อาจจะมีได้หลาย Client / Platform เช่น Quotation App มีทั้ง Platfrom: Mobile App, Web, TV เป็นต้น
OAuth Consent Screen = “Application” คือสิ่งที่ผู้ใช้ มองเห็น ตอนหน้า popup ขอ permission เช่น ชื่อแอป โลโก้ โดเมน scope ที่ขอ หนึ่ง project มีได้แค่ 1 consent screen คือแอปในสายตาผู้ใช้มีได้ “1 ชื่อ” ต่อ project
OAuth Client คือ credential จริง ๆ ที่ใช้ในโค้ด ได้แก่ client_id และ client_secret หนึ่ง project สร้างได้หลาย client แต่ทุก client แชร์ consent screen เดียวกัน แยกตาม platform type เช่น Web App, Android, iOS, Desktop
ขั้นตอนที่ 1: สร้าง Google Cloud Project
- เข้าไปที่ Google Cloud Console
- คลิกที่ Select a project (1) แล้วคลิก New project (2)

- กรอกชื่อ Project (เช่น
vibe-coding-project) แล้วคลิก Create

ขั้นตอนที่ 2: เข้าสู่ OAuth Consent Screen
หลังจากสร้าง project แล้ว:
- คลิกเมนู ☰ ด้านซ้าย
- ไปที่ APIs & Services (1) > OAuth consent screen (2)

- หน้าจอจะแสดง OAuth Overview ให้คลิก Get started (กรณีที่เคยสร้างมาแล้วให้เข้าไปที่ เมนูย่อยที่ชื่อ Clients แทนและคลิก Create client)

ขั้นตอนที่ 3: ตั้งค่า Project Configuration
3.1 App Information
กรอกข้อมูลแอปพลิเคชัน:
- App name — ชื่อที่จะแสดงตอน login (เช่น “Vibe Coding”)
- User support email — เลือก email ของคุณ

3.2 Audience
เลือก External เพื่อให้ทุกคนที่มี Google Account สามารถ login ได้

3.3 Contact Information
กรอก email ที่ Google จะใช้แจ้งเตือนเกี่ยวกับ project

3.4 Finish
ติ๊กยอมรับ Google API Services: User Data Policy แล้วคลิก Continue > Create

ขั้นตอนที่ 4: Publish to Production ⚠️ สำคัญ!
หลังจากสร้าง OAuth consent screen แล้ว ไปที่เมนู Audience (1) คุณจะเห็น Publishing status เป็น “Testing”
ให้คลิก “Publish app” (2) เพื่อเปลี่ยนเป็น Production

⚠️ ทำไมต้อง Publish to Production?
Testing Mode Production Mode จำกัด 100 users ตลอดอายุ app ไม่จำกัดจำนวน users ต้องเพิ่ม test users ด้วยมือ ทุกคนสามารถ login ได้ สำหรับ app ที่ใช้เฉพาะ scope พื้นฐาน (email, profile) ไม่ต้องผ่านการ verify จาก Google
ขั้นตอนที่ 5: สร้าง OAuth Client ID
- ไปที่เมนู Clients (1) แล้วคลิก Create client (2)

- เลือก Application type เป็น Web application
- ตั้งชื่อ (เช่น “Web client 1”)
- ในส่วน Authorized redirect URIs — ใส่ callback URL ตามวิธีที่คุณทำงาน

Authorized Redirect URIs ตามวิธีการทำงาน
ใส่ ทุก URL ที่คุณจะใช้งาน (สามารถใส่ได้หลาย URL):
| วิธีการทำงาน | Redirect URI |
|---|---|
| Local Development | http://localhost:3000/api/auth/callback/google |
| GitHub Codespaces การดู Port 3000 และ URL ที่กำลังใช้งานใน GitHub Codespaces | https://<codespace-name>-3000.app.github.dev/api/auth/callback/google |
| Production (Railway) | https://your-app.railway.app/api/auth/callback/google |
| Custom Domain | https://your-domain.com/api/auth/callback/google |
💡 ความสัมพันธ์กับ NEXTAUTH_URL:
Authorized Redirect URI
= NEXTAUTH_URL + /api/auth/callback/google
NEXTAUTH_URL Redirect URI http://localhost:3000http://localhost:3000/api/auth/callback/googlehttps://my-codespace-3000.app.github.devhttps://my-codespace-3000.app.github.dev/api/auth/callback/googleค่า
NEXTAUTH_URLจะถูกถามในnpm run setup— ต้องตรงกับ domain ที่ใส่ใน Google Cloud
ขั้นตอนที่ 6: บันทึก Client ID และ Client Secret
หลังจากสร้างเสร็จ จะได้ Client ID และ Client Secret

⚠️ สำคัญ: Copy ค่าเหล่านี้ไว้ทันที! Client Secret จะไม่สามารถดูได้อีกหลังจากปิด dialog นี้
นำไปใช้ใน
npm run setup:
GOOGLE_CLIENT_ID— ค่า Client IDGOOGLE_CLIENT_SECRET— ค่า Client Secret
ใช้ Google Cloud Project ให้เหมาะกับลักษณะงาน
กรณีบริษัทเดียวกัน อยากมีหลาย Application ให้สร้างหลาย Project
แต่ละ Application ควรแยก project เพราะ consent screen ผูกกับ project การผสมหลายแอปใน project เดียวทำให้ผู้ใช้เห็นชื่อแอปเดียว แต่ scope ปะปนกัน และ quota ของ API ก็นับรวมกัน สับสนมาก
Project: "mycompany-hr-app" → consent: "HR Portal"
Project: "mycompany-crm-app" → consent: "Sales CRM"
กรณี Product เดียวกัน อยากมีหลาย Platform (Web / iOS / Android) ให้ใช้ Project เดียว สร้างหลาย Client
นี่คือ use case หลักของ multiple clients หน้า consent screen ที่ผู้ใช้เห็นจะเป็นชื่อเดียวกัน แต่ credential แต่ละ platform แยกกัน
Project: "myapp" → consent: "My App"
├── Client: Web App (client_id_web)
├── Client: Android (client_id_android, package: com.myapp)
└── Client: iOS (client_id_ios, bundle: com.myapp.ios)
กรณีเป็น Software House มีลูกค้าหลายคนให้แยกตาม Project ไปเลย
ข้อผิดพลาดที่พบบ่อยคือเอาลูกค้าหลายรายมาไว้ใน project เดียวกัน ปัญหาที่ตามมาคือ consent screen มีได้แค่ชื่อเดียว ผู้ใช้ของลูกค้า A จะเห็นว่าแอปชื่อตามลูกค้า B ได้, quota นับรวมกัน, ถ้า project ถูก suspend ลูกค้าทุกคนพังพร้อมกัน
Project: "client-a-prod" → consent: "Client A App" (ตั้ง branding ให้ลูกค้า A)
Project: "client-b-prod" → consent: "Client B App" (ตั้ง branding ให้ลูกค้า B)
สรุป
| ขั้นตอน | สิ่งที่ต้องทำ |
|---|---|
| 1. สร้าง Project | ตั้งชื่อ project ใน Google Cloud Console |
| 2. OAuth Consent Screen | กรอก App name, email, เลือก External |
| 3. Publish to Production | คลิก “Publish app” เพื่อไม่ให้จำกัด users |
| 4. สร้าง Credentials | เลือก Web application, ใส่ redirect URIs |
| 5. บันทึก Credentials | Copy Client ID และ Client Secret |