
กำลังโหลด...

กำลังโหลด...

Register สร้างผู้ใช้และเก็บ password hash ส่วน Login ตรวจรหัสแล้วออก token ถ้าสอง flow นี้ยังปนกัน โค้ดที่เหลือจะกลายเป็นการก๊อปโดยไม่เข้าใจ
| คำถาม | ชื่อแนวคิด | คำตอบอยู่ตรงไหน |
|---|---|---|
| “คุณเป็นใคร?” | Authentication | Login + bcrypt.compare |
| “คุณทำสิ่งนี้ได้ไหม?” | Authorization | Protected route + WHERE user_id |
flowchart LR
A["email + password\nจาก req.body"] --> B["bcrypt.hash(password, 10)"]
B --> C["passwordHash"]
C --> D["INSERT users\nemail + password_hash"]
Database ต้องเก็บ password_hash ไม่ใช่ password เดิม เพราะถ้าข้อมูลรั่ว เราไม่ควรทำให้ password ของผู้ใช้รั่วตามไปด้วย
flowchart LR
A["email + password"] --> B["SELECT user by email"]
B --> C["bcrypt.compare\npassword + stored hash"]
C -->|"ไม่ตรง"| D["401 Invalid credentials"]
C -->|"ตรง"| E["jwt.sign({ userId })"]
E --> F["ส่ง token กลับ"]
| ของ | เก็บ/ส่งที่ไหน | ห้ามทำ |
|---|---|---|
| password เดิม | รับจาก req.body ชั่วคราว |
ห้ามเก็บลง database |
| password hash | users.password_hash |
ห้ามส่งกลับใน JSON |
| JWT secret | .env ฝั่ง server |
ห้ามส่งให้ client |
| JWT token | response หลัง login | ห้ามใส่ password ไว้ใน payload |
Register = สร้างบัญชีด้วย hash; Login = ตรวจ password แล้วออกบัตรผ่าน (token)
ถ้าต้องเลือกเก็บสิ่งหนึ่งใน Database ให้เลือก password_hash ไม่ใช่ password และถ้าต้องส่งสิ่งหนึ่งกลับหลัง Login ให้ส่ง token ไม่ใช่ password_hash

จัดคำเหล่านี้ลง Register หรือ Login:
bcrypt.hash · INSERT users · SELECT user by email · bcrypt.compare · jwt.sign
แล้วตอบว่า Database เก็บ password จริงหรือไม่ และ token ถูกสร้างตอนไหน