Pembahasan UAS Mata Kuliah Pengembangan Aplikasi Bergerak

Soal no. 1 Pembahasan soal no. 1 Mendistribusikan aplikasi yang dibuat orang lain memiliki resiko yang besar terhadap akun Google Play yang kita miliki. Aplikasi yang dibuat orang lain bisa saja memuat malware ataupun konten yang tidak sesuai dengan ketentuan yang dibuat oleh Google, apabila hal tersebut ada di aplikasi yang diminta untuk kita upload, akun Google Play yang kita miliki dapat dibanned oleh Google. Jadi tidak disarankan untuk menggunakan akun Google Play developer untuk mengupload aplikasi yang dibuat oleh orang lain tanpa memastikan source code dan konten yang ada di dalamnya. Apabila tetap ingin mengunggah aplikasi yang dibuat oleh orang lain sebaiknya gunakan akun baru yang terpisah dari akun yang biasa kita gunakan. Soal no. 2 Pembahasan soal no. 2 Tracking aktivitas user di smartphone lazim digunakan untuk menghadirkan iklan yang terpersonalisasi, atau iklan yang sesuai dengan preferensi user. Hal ini akan meningkatkan peluang sebuah iklan diklik oleh user karena mem

Membuat Autentikasi User di Node.js Menggunakan Passport

diupdate pada 29 Desember 2020

Postingan kali ini akan dibahas turotial membuat autentikasi user untuk proses login di web app yang dibuat menggunakan nodejs, express, dan passport. Ketika user belum login akan diarahkan ke halaman /login untuk memasukkan username dan password yang terdapat di database.


Setelah berhasil login, user akan diarahkan ke halaman /.
Untuk login digunakan database MySQL. Data user untuk login ada di tabel users, username mengambil kolom first_name dan password menggunakan data di kolom password.

File database langkap dapat diunduh di sini.

Install node module yang dibutuhkan
npm install express express-session pug mysql passport passport-local --save

Buat halaman untuk login, memuat sebuah form dengan method POST dan action, misalnya ke /login. Pada project ini digunakan templating engine pug. Source code halaman login adalah sebagai berikut (file views/signin.pug)
extends layout

block content  
  main.container.mt-5
    h1= 'Login'
    form(action="/login" method="POST")
      .row.form-group
        label(for="Username") Username 
        input#username(type="text", name="username") 
      .row.form-group
        label(for="Password") Password 
        input#password(type="password", name="password")
input.btn.btn-primary(type="submit" value="Submit")

Pada file main javascript (app.js) tambahkan variabel passport dan LocalStrategy (metode autentikasi passport yang digunakan adalah local, yaitu menggunakan data user yang terdapat di database)
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

Tambahkan variabel untuk koneksi data ke MySQL
var mysql = require('mysql');
var con = mysql.createConnection({
  host: "nama_host",
  user: "username_mysql",
  password: "password_mysql",
  database: "nama_database"
});

Tambahkan code berikut untuk autentikasi user dengan passport
passport.use(new LocalStrategy(
  function(username, password, done) {
    con.query('SELECT * FROM users WHERE first_name = ? and password = ?', 
    [username, password], function(err, rows, fields) {
      if(err) return done(err);
  
      // if user not found
      if (rows.length <= 0) {
        return done('Incorrect username or password.');
      } 
      return done(null, rows[0]);
    });
  }
));

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  con.query('SELECT * FROM users WHERE id = ?', [id], function(err, user) {
    if(err) return done(err);
    done(null, user);
  });
});

Tambahkan konfigurasi express-session, misalnya sebagai berikut
app.use(require('express-session')(
  { secret: 'keyboard cat', resave: false, saveUninitialized: false })
);

Kemudian tambahkan code untuk inisialiasi passport
app.use(passport.initialize());
app.use(passport.session());

Selanjutnya tambahkan function isAuthenticated yang digunakan untuk membatasi akses user ke route tertentu, apabila user belum login akan diarahkan ke halaman /login
function isAuthenticated(req, res, next) {
  if (req.isAuthenticated())
    return next();
  res.redirect('/login');
}

Contoh penggunaan function isAuthenticated sebagai berikut
app.get('/', isAuthenticated, function(req, res) {
  res.render('index', {title: 'Express'});
});

Ketika user mengakses /, akan diperiksa terlebih dulu apakah user sudah terautentikasi (sudah login). Apabila user sudah login, user akan diarahkan ke /, namun bila user belum login akan diarahkan ke /login.

Isi dari route GET /login adalah render halaman signin yang berisi form untuk login
app.get('/login',
  function(req, res){
    res.render('signin');
  }
);

Sedangkan untuk POST /login yang berisi mekanisme login user, isinya adalah sebagai berikut
app.post('/login', 
  passport.authenticate('local', { 
    successRedirect: '/',
    failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
});

Demikianlah cara membuat mekanisme autentikasi user menggunakan module passport di Node.js, untuk lebih jelasnya dapat mengclone project lengkap dari laman Github.

Apabila terdapat hal yang kurang jelas, silakan menuliskan pertanyaan di kolom komentar. Terima kasih, semoga bermanfaat.

Comments

Post a Comment