ไม่สามารถตรวจสอบว่าโทเค็น JWT พร้อมใช้งานสำหรับแต่ละเส้นทางในโหนด js หรือไม่

ฉันมีแอปพลิเคชันโหนด เมื่อลูกค้ากำหนดเส้นทางไปที่ ('/เข้าสู่ระบบ') และด้วยข้อมูลประจำตัวที่ถูกต้อง ฉันกำลังสร้างโทเค็น JWT โดยมีเวลาหมดอายุและกำหนดเส้นทางไปยังหน้าถัดไป และหากผู้ใช้พยายามเข้าถึงเส้นทางใดๆ เช่น:('/home') โดยตรงหลังจากเข้าสู่ระบบ หากโทเค็นยังไม่หมดอายุ เขาควรจะสามารถกำหนดเส้นทางได้โดยตรง หากโทเค็นหมดอายุฉันต้องกำหนดเส้นทางไปที่ ('/login')

แต่ขณะนี้ยังใช้งานได้บางส่วน หากมีโทเค็นอยู่ เขาก็จะสามารถกำหนดเส้นทางไปยัง ('/home) ได้โดยตรง แต่เมื่อฉันเปิดเส้นทางเดียวกันในเบราว์เซอร์/หน้าต่างที่ไม่ระบุตัวตนที่ต่างไปจากเดิมอย่างสิ้นเชิง เขายังคงสามารถกำหนดเส้นทางได้ และใช้โทเค็นก่อนหน้า ซึ่งไม่ควรเป็นและควรถูกกำหนดเส้นทางไปที่ ('/login') เราจะทำสถานการณ์นี้ได้อย่างไร

ด้านล่างเป็นรหัสของฉันที่ฉันลอง

const SECRET = 'server secret';
var token;
router.post('/auth', passport.authenticate(  
  'local', {
   session: false
  }),generateToken, inserttoken,respond);
function generateToken(req, res, next) {  
   token = jwt.sign({
   id: req.user.id,
   },SECRET, {
    expiresIn: 60
  });
   req.token = token;
   next();
 }
 //In inserttoken() Iam inserting token value in db.
 router.get('/home', function(req, res){
    jwt.verify(token, 'server secret', function(err, decoded) {
      if (err) {
        console.log("token expired");
        res.redirect('/');
      } 
      else{
        res.render('index.html');
      } 
   });
});

ความช่วยเหลือใด ๆ ที่ชื่นชม ขอบคุณล่วงหน้า!


person hammy    schedule 05.01.2018    source แหล่งที่มา


คำตอบ (1)


นั่นคือพฤติกรรมที่ตั้งใจไว้ คิดว่า JWT เป็นกุญแจและ REST API ของคุณเป็นเหมือนล็อค เมื่อมีคนนำกุญแจมาเปิดล็อค ล็อคจะตรวจสอบเฉพาะกุญแจเท่านั้นว่ากุญแจถูกต้องหรือไม่ แต่ล็อคจะไม่ตรวจสอบว่าคนที่ถือกุญแจนั้นถูกต้องหรือไม่

นั่นคือสิ่งที่เกิดขึ้นที่นี่เช่นกัน JWT เป็นเพียงกุญแจสำคัญ ไม่ได้ถ่ายทอดข้อมูลไปยัง REST API เกี่ยวกับไคลเอนต์ (เบราว์เซอร์ในกรณีของคุณ) ที่กำลังส่งคำขอด้วยรหัสนั้น REST API เพียงตรวจสอบคีย์และอนุญาต/ปฏิเสธคำขอ

(คำตอบนี้ขึ้นอยู่กับสมมติฐานที่ว่าคุณส่งรหัสเดียวกับที่คุณได้รับจากเบราว์เซอร์ก่อนหน้าในเบราว์เซอร์โหมดไม่ระบุตัวตนของคุณด้วย)

person Ishan Thilina Somasiri    schedule 05.01.2018