Skip to content

สิ่งที่ต้องปรับปรุง #1

@nakorndev

Description

@nakorndev

cashbag/server.js

Lines 24 to 28 in 8b24d25

app.use(cookieSession({
name: 'session',
keys: ['key1', 'key2'],
maxAge: 3 * 24 * 60 * 60 * 1000 // 3day
}))

ลองเปลี่ยนจาก keys ไปใช้ secret แทนก็ได้ครับ และก็ไม่ควร Commit ขึ้นมา ควรเก็บไว้เป็นความลับ ศึกษาเรื่องการใช้ .env และวิธีการทำให้ไม่สนใจการเปลี่ยนแปลงไฟล์นี้จากการเติมลงไฟล์ .gitignore ครับ อ้างอิงจาก https://expressjs.com/en/resources/middleware/cookie-session.html#secret

นอกจากนี้แล้วควรตั้งค่า sameSite secure httpOnly เข้าไปด้วย โดย sameSite ช่วยป้องกันละเมิด Cookie จากเว็บภายนอก ส่วนของ secure ใช้ตอนเราทำ https และ httpOnly ควรเปิดเพื่อป้องกันไม่ให้ JavaScript เข้าถึง ให้เข้าถึงข้อมูล Cookie ผ่าน Http เท่านั้น

และอันที่จริงผมแนะนำศึกษา https://expressjs.com/en/resources/middleware/session.html และใช้แทนตัว cookie-session มันดีตรงที่มี rolling ช่วยให้ต่ออายุ User ไม่อย่างงั้นนึกภาพดู ครบ 3 วันพอดี User จะหลุดจากการใช้งาน ถ้าเขาใช้วันที่ 3 พอดี จู่ๆเขาจะ Logout เองครับเพราะเราไม่ได้ต่ออายุ หรือมีโค้ดต่ออายุแล้วผมก็ไม่แน่ใจนะ

cashbag/server.js

Lines 84 to 91 in 8b24d25

user_.getAccountData(auth_token.id).then(result=>{
if(result!=='error - account not found!'){
res.status(400).render('home',{account: auth_token,data: result});
}else{
req.session = null;
res.redirect('/');
}
});

แนะนำให้ใช้ Async/Await แทนนะครับ ลองศึกษาที่ https://javascript.info/async-await

สรุปโดยรวมอีก เห็นใช้ Firestore อย่าลืมศึกษา https://firebase.google.com/docs/firestore/security/get-started เรื่องนี้ถ้าเราพลาด อย่างเปิดให้ allow read; allow write; ทั้งคู่ละก็ ใครๆก็จะเข้ามาดัดแปลงข้อมูลเราได้ตลอด ดังนั้นการจะใช้ Firestore ในการบันทึกข้อมูล อาจจะผิด Concept ไปพอสมควร เพราะเราต้องมาดูว่า Firebase คือ BaaS เป็นการให้บริการ Backend ที่เราไม่ต้องมีโค้ด Express.js แบบนี้ครับ สิ่งที่เรากำลังทำจะกลายเป็นเพิ่มงาน เพราะบริการ Firebase เน้นเรียบง่าย และใส่ Logic ลงใน Frontend ทั้งหมด จากนั้นอะไรที่เป็นเงื่อนไขพิเศษจะทำเป็น Cloud Function เล็กๆแทน ก็แนะนำว่าใช้ฐานข้อมูลปกติอย่าง PostgreSQL, MySQL, MongoDB สักตัวแทนจะดีกว่าครับ อีกทั้งเห็นใช้ Firebase Auth แต่มีการเรียกใช้ Passport.js ซ้ำเลยไม่แน่ใจว่าอย่างไร? เพราะปกติ Firebase Auth ตัวเดียวก็น่าจะพอแล้ว น่าจะไม่ต้องใช้ Passport.js ซ้ำอีกครั้ง เพราะอย่างที่บอกมันคือ BaaS มันจะจบในตัวเดียวได้สำหรับระบบหลังบ้าน

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions