TDD
The Dev's Desk10mo ago
optimistic-gold

[Javascript] เจอปัญหาในการฝึกเขียน express.js ครับ

ผมกำลังฝึกเขียน การล็อกอินครับ เจอปัญหาก็คือเมื่อผู้ใช้งานล็อกอินสำเร็จ(username,password ถูกต้อง) ปัญหาคือ console.log(req.isAuthenticate()) ใน เราท์ "/login" แสดงค่าเป็น true แต่ ใน route "/checklogin" แสดงค่า false ครับ
No description
21 Replies
optimistic-gold
optimistic-goldOP10mo ago
อันนี้เป็นโค้ดที่ใช้run serverนะครับไฟล์ server.js
const express = require('express');
const indexRouter = require('./routes/classes.js');
const userRouter = require('./routes/users.js')
const cors = require('cors');
const session = require('express-session');
const passport = require('passport');
const localStrategy = require('passport-local').Strategy;

const app = express();

app.get('*',(req,res,next) => {
res.locals.user = req.user || null;
next();
})

// middle ware
app.use(express.urlencoded({extended:true}));
app.use(cors({ origin: 'http://localhost:3000' }));
app.use(session({
secret:'elerning',
resave:false,
saveUninitialized:true,
cookie:{
secure:false,
// httpOnly:true,
// sameSite:'lax'
}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.json());
app.use(indexRouter);
app.use(userRouter);

app.listen(5000,() => {console.log('server start at port 5000')})
const express = require('express');
const indexRouter = require('./routes/classes.js');
const userRouter = require('./routes/users.js')
const cors = require('cors');
const session = require('express-session');
const passport = require('passport');
const localStrategy = require('passport-local').Strategy;

const app = express();

app.get('*',(req,res,next) => {
res.locals.user = req.user || null;
next();
})

// middle ware
app.use(express.urlencoded({extended:true}));
app.use(cors({ origin: 'http://localhost:3000' }));
app.use(session({
secret:'elerning',
resave:false,
saveUninitialized:true,
cookie:{
secure:false,
// httpOnly:true,
// sameSite:'lax'
}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.json());
app.use(indexRouter);
app.use(userRouter);

app.listen(5000,() => {console.log('server start at port 5000')})
optimistic-gold
optimistic-goldOP10mo ago
optimistic-gold
optimistic-goldOP10mo ago
ปัญหาคือเมื่อผู้ใช้งาน login ผ่าน (username,password)ถูกต้อง console.log(req.isAuthenticated()) ใน เราท์ "/login" แสดงค่าเป็น true แต่ในเราท์ "/checklogin" แสดงค่าเป็น false อยากทราบเพราะอะไรครับ ในความเข้าใจของผมก็คือเมื่อ เราท์ "/login" ทำงานได้ถูกต้องไม่มี error แสดงว่า ผู้ใช้งานนั้นๆ loginเข้าสู่ระบบได้แล้ว เมื่อ เช็คด้วย req.isAuthenticated() มันควรจะมีค่าเป็น true ไหมครับ เพราะตัว cookie connect.sid ก็ถูกสร้างขึ้นหลังจากผ่านการ login แล้วครับ
qwrts
qwrts10mo ago
สอบถามหน่อยครับ ตอนรันมีอะไรเกิดขึ้รไหมครับ แบบ error ต่างๆ ลองส่งมาได้ไหมครับ เผื่อจะหาต้นตอได้ครับ
optimistic-gold
optimistic-gold10mo ago
น่าจะต้องใส่ passport.authenticate('local') ที่ /checklogin ครับ
optimistic-gold
optimistic-goldOP10mo ago
พอใส่แล้วลอง fetch ดู บราวเซอร์มันตอบกลับมา Bad request ครับ
fascinating-indigo
fascinating-indigo10mo ago
ลอง gpt รึยังคับ
optimistic-gold
optimistic-goldOP10mo ago
ไม่มี error ครับ แต่คิดว่าสาเหตุน่าจะเป็นเพราะ มี 2 serverครับ คือหน้าบ้าน port 3000 หลังบ้าน port 5000 ทีนี้ผมเก็บ session เป็นแบบคุกกี้ครับ session มันเลยไม่เห็นกัน ประมาณว่า เรา login ที่ port 5000 แต่เราเรียกใช้ข้อมูลที่ browser รันที่ port 3000 session ที่อยู่ใน server เลยไม่เห็นกันครับ ลองแล้วครับ ถามรอบแรกๆเหมือนจะดีครับแต่พอถามไปถามมาแก้ไปแก้มาดันออกทะเลซะงั้นครับ
fascinating-indigo
fascinating-indigo10mo ago
ขอดูโค้ด login fontent end fetch หรือ axios
optimistic-gold
optimistic-goldOP10mo ago
ใช้ fetch ครับ หน้าบ้านเป็น html+tailwindcss+javascript ครับ
fascinating-indigo
fascinating-indigo10mo ago
fetch(url, {
credentials: 'include',
headers: {
'Content-Type': 'application/json'
}
})
fetch(url, {
credentials: 'include',
headers: {
'Content-Type': 'application/json'
}
})
เพิ่มพวกนี้เข้า ตรง fetch login, check session
fascinating-indigo
fascinating-indigo10mo ago
fascinating-indigo
fascinating-indigo10mo ago
ละเอาไฟล์พวกนี้ลองดู ai มา ได้บ่คับ @pangpondKub
optimistic-gold
optimistic-goldOP10mo ago
ผมลบโค้ดเดิมไปแล้วครับ สาเหตุน่าจะมาจาหในส่วนนี้ครับ กะว่าจะโล๊ะเขียนใหม่เลยครับ
fascinating-indigo
fascinating-indigo10mo ago
ม่าเกี่ยวนะ ผมเขียน React api ต่างๆ fastapi python รันแยก 2 port เทสบนเครื่องได้ปกติ ผมไม่แน่ใจเหมือนกันเพราะไม่ได้สายนี้โดยตรง ยังไงลองดูละปรึกษากันก่อได้คับ
optimistic-gold
optimistic-goldOP10mo ago
ได้ครับ คิดว่าไอที่ผมกำลังจะเขียนใหม่เดี๋ยวมีErrorมาแชร์ให้ช่วยแน่นอนครับ555 ขอบคุณทุกๆท่านมากเลยครับ
fascinating-indigo
fascinating-indigo10mo ago
คับบ
qwrts
qwrts10mo ago
ตอนนี้สามารถแก้ได้รึยังครับผม
optimistic-gold
optimistic-goldOP10mo ago
ไม่เชิงว่าแก้ได้ครับ แต่เปลี่ยนไปใช้ jwt แทน cookie ครับ ขอบคุณมากๆครับ
qwrts
qwrts10mo ago
โอเคครับผม ขออนุญาตปิดโพสต์นะครับ
fair-rose
fair-rose10mo ago
🔒 โพสต์ถูกล็อคแล้ว โพสต์นี้ถูกตั้งสถานะว่า แก้ไขเรียบร้อยแล้ว หากมีคำถามเพิ่มเติม กรุณาทำการโพสต์ใหม่ได้ที่หมวดหมู่ <#1236768988663644261>

Did you find this page helpful?