Tidak dapat memeriksa apakah token JWT tersedia untuk setiap rute di node js

Saya memiliki aplikasi simpul. Ketika pelanggan merutekan ke ('/ login') dan dengan kredensial yang valid, saya membuat token JWT dengan beberapa waktu kedaluwarsa dan mengarahkan ke halaman berikutnya. Dan jika pengguna mencoba mengakses rute apa pun misalnya:('/home') langsung setelah login, jika token belum kedaluwarsa, ia seharusnya dapat melakukan rute secara langsung. Jika token kedaluwarsa, saya perlu merutekan ke ('/ login').

Namun saat ini berfungsi sebagian, jika token tersedia dia dapat langsung melakukan rute ke ('/home). Tetapi ketika saya membuka rute yang sama di browser/jendela penyamaran yang sama sekali berbeda, dia masih dapat melakukan rute dan mengambil token sebelumnya. Yang tidak seharusnya dan dia harus dialihkan ke ('/ login'). Bagaimana kita bisa melakukan skenario ini.

Di bawah ini adalah kode saya yang saya coba

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');
      } 
   });
});

Bantuan apa pun dihargai. Terima kasih sebelumnya!


person hammy    schedule 05.01.2018    source sumber


Jawaban (1)


Itulah perilaku yang dimaksudkan. Bayangkan JWT sebagai kunci dan REST API Anda sebagai kunci. Ketika seseorang datang dengan membawa kunci untuk membuka gembok, maka gembok hanya akan memeriksa kuncinya, apakah kuncinya benar atau tidak. Namun gembok tersebut tidak akan memeriksa apakah orang yang membawa kunci tersebut adalah orang yang benar.

Hal serupa juga terjadi di sini. JWT hanyalah sebuah kunci. Itu tidak menyampaikan informasi ke REST API tentang klien (browser dalam kasus Anda) yang mengirimkan permintaan dengan kunci itu. REST API hanya memeriksa kunci dan mengizinkan/menolak permintaan.

(Jawaban ini didasarkan pada asumsi bahwa Anda juga mengirimkan kunci yang sama yang Anda peroleh dari browser sebelumnya di browser mode penyamaran Anda)

person Ishan Thilina Somasiri    schedule 05.01.2018