N

Nokfa Docs

Current: framework-next.js

ไม่มีชื่อบทความ

👤 ผสาน Firebase Auth กับ Firestore Rules เพื่อควบคุมสิทธิ์

🔑 ตั้งค่า Email/Password Authentication

  1. ไปที่ Firebase Console → Authentication → Sign-in method
  2. เปิดใช้งาน Email/Password และกด Save

🔐 เพิ่ม Google Sign-In (Popup)

  1. เปิดใช้งาน Provider "Google"
  2. ด้าน client ใช้ popup sign-in:
import { getAuth, signInWithPopup, GoogleAuthProvider } from 'firebase/auth';

const auth = getAuth();
const provider = new GoogleAuthProvider();

signInWithPopup(auth, provider)
  .then(result => console.log(result.user))
  .catch(error => console.error('❌', error));

🧾 อ่าน user.uid แล้วบันทึกลง Firestore

import { getAuth } from 'firebase/auth';
import { doc, setDoc } from 'firebase/firestore';
import { db } from '@/lib/firebaseClient';

const auth = getAuth();
const user = auth.currentUser;

if (user) {
  await setDoc(doc(db, 'users', user.uid), {
    name: user.displayName,
    email: user.email,
    createdAt: new Date()
  });
}

📜 Firestore Rules แบบจำกัดสิทธิ์ต่อ user

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}
  • ใช้ userId จาก path เป็นตัวเปรียบเทียบกับ request.auth.uid
  • ถ้า uid ตรงกัน → อ่าน/เขียนได้

🧪 แนะนำการทดสอบ Rules ด้วย Rules Playground

  1. ไปที่ Firebase Console → Firestore → Rules
  2. คลิกปุ่ม “Rules Playground” (ด้านขวาบน)
  3. ใส่ UID ที่ต้องการทดสอบ, เอกสาร target เช่น /users/abc123
  4. เลือก action เช่น get() หรือ set()
  5. กด Run Test → จะเห็นว่า "ALLOW" หรือ "DENY"

🧠 ใช้ทดสอบ logic rules ก่อน deploy production เพื่อป้องกัน error ที่อาจเกิด


การผสาน Firebase Authentication กับ Firestore Security Rules ช่วยให้ควบคุมการเข้าถึงข้อมูลได้ละเอียดขึ้น ปลอดภัยกว่า client‑side check เพียงอย่างเดียว และเหมาะกับการออกแบบระบบที่มี user หลายประเภทหรือสิทธิ์เฉพาะตัว