Lebih Lanjut

Menyimpan userId dari session ke locals variabel menggunakan middleware

// app.js
//    dibawah app.use(session())

//make user id available in templates

app.use(function (req, res, next) {
  res.locals.currentUser = req.session.userId;
  next();
});


// lalu menggunakan variabel tersebut untuk mengubah 
// template berdasarkan ada tidaknya data di currentUser

Menambahkan rute logout jika user ingin keluar dan menghapus data session

// GET /logout

router.get('/logout', function (req, res, next) {
  if (req.session) {
    //delete session
    req.session.destroy(function(err) {
      if(err) {
        return next(err);
      } else {
        return res.redirect('/');
      }
    });
  }
});

Menambahkan Custom Middleware jika user telah login, dia tidak dapat melihat konten register dan login

// middleware/index.js

function loggedOut(req, res, next) {
  if (req.session && req.session.userId) {
    return res.redirect('/profile');
  }
  return next();
}

module.exports.loggedOut = loggedOut;



// routes/index.js

var mid = require('../middleware');

...

//   GET /login
router.get('/login', mid.loggedOut, function(req, res, next) {
  ...
});


//   GET /register
router.get('/register', mid.loggedOut, function(req, res, next) {
  ...
});

Menambahkan custom middleware lainnya, jika dia belum melakukan login dan inign membuka halaman profile

// middleware/index.js

function requiresLogin(req, res, next) {
    if(req.session && req.session.userId) {
        return next();
    } else {
        var err = new Error('U must be logged in');
        err.status = 401;
        return next(err);
    }
}

module.exports.requiresLogin = requiresLogin;



// routes/index.js
//     GET /profile
router.get('/profile', mid.requiresLogin, function(req, res, next) {
  ...
});


//     dengan menambahkan mid.requiresLogin, maka kita bisa menghapus
//     block mencari data session, karena sudah ada di custom middleware
...
if ( !req.session.userId ) {
    const err = new Error("You are not authorized to view this page.")
    err.status = 403
    return next(err)
}
...

Memindahkan data Session, dari memory ke database. yaitu menggunakan MongoStore

// install connect-mongo
var MongoStore = require('connect-mongo')(session)

...
app.use(session(
    ...,
    store: new MongoStore({
        mongooseConnection: db
    })
))


// pastikan variabel db dapat di akses pada bagian ini,
// perhatikan urutan kode di dalam app.js

// perhatikan juga ketika user melakukan login, terhadap database
// dan yang terjadi terhadap database ketika user logout

Lebih lanjut lagi

  • Ketika kita melakukan login, data login dikirim begitu saja, dan mungkin saja ditengah jalan ada yang mengambil data tersebut, maka kita memerlukan jalur yang aman
  • Maka website sekarang, selalu menggunakan HTTPS, dengan S adalah Secure. Dengan ini, transaksi data akan di enkripsi. Untuk dapat mengaplikasikan hal tersebut banyak penyedia Sertifikat Enkripsi, namun contoh yang mudah dan gratis adalah Let's Encrypt
  • Salah satu cara lainnya untuk mengamankan data adalah membuat token (JSON Web Tokens). Setiap user yang melakukan login, server akan mengembalikan token. Cara kerjanya akan sama seperti session dan cookies.
  • Pilihan lainnya untuk mengamankan transaksi adalah diantaranya OAuth, dan PassportJS

results matching ""

    No results matching ""