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