Guys follow ig mimin Follow Instagram

Belajar Backend Part 8 - Autentikasi dan Otorisasi

Menangani Autentikasi dan Otorisasi di Backend dengan Express.js

Menangani Autentikasi dan Otorisasi di Backend dengan Express.js

Autentikasi dan Otorisasi Express.js

Autentikasi dan otorisasi adalah dua konsep penting dalam pengembangan aplikasi backend. Autentikasi memastikan bahwa pengguna yang mengakses aplikasi adalah siapa yang mereka klaim, sementara otorisasi menentukan hak akses mereka dalam aplikasi. Dalam artikel ini, kita akan belajar bagaimana cara menangani autentikasi dan otorisasi menggunakan Express.js, Passport.js, dan JWT (JSON Web Token).

Instalasi dan Persiapan

Untuk implementasi autentikasi dan otorisasi, kita akan menggunakan dua library utama:

  • Passport.js - Middleware untuk autentikasi pengguna.
  • jsonwebtoken (JWT) - Untuk membuat token yang digunakan untuk autentikasi pengguna di berbagai request.

Langkah pertama adalah menginstal dependensi yang diperlukan:


$ npm install passport passport-local jsonwebtoken bcryptjs express-session

    

Mengatur Passport.js untuk Autentikasi

Passport.js adalah middleware yang mendukung berbagai strategi autentikasi. Di sini, kita akan menggunakan strategi lokal untuk mengautentikasi pengguna berdasarkan username dan password. Berikut adalah cara mengatur Passport.js:


const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcryptjs');

// Definisikan bagaimana Passport akan menangani autentikasi
passport.use(new LocalStrategy((username, password, done) => {
    User.findOne({ username: username }, (err, user) => {
        if (err) return done(err);
        if (!user) return done(null, false, { message: 'Incorrect username' });

        bcrypt.compare(password, user.password, (err, res) => {
            if (err) return done(err);
            if (res) return done(null, user); // Autentikasi berhasil
            else return done(null, false, { message: 'Incorrect password' });
        });
    });
}));

    

Menyimpan Pengguna di Session

Passport.js menyarankan untuk menyimpan data pengguna dalam session setelah autentikasi berhasil. Berikut cara melakukannya:


passport.serializeUser((user, done) => {
    done(null, user.id); // Simpan ID pengguna di session
});

passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        done(err, user); // Dapatkan data pengguna dari ID yang disimpan di session
    });
});

    

Menambahkan Middleware untuk Autentikasi

Setelah Passport.js diatur, kita perlu menambahkan middleware yang akan digunakan untuk melindungi route yang memerlukan autentikasi. Berikut adalah contoh middleware untuk memastikan bahwa pengguna sudah terautentikasi:


function isAuthenticated(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect('/login');
}

// Menggunakan middleware di route yang dilindungi
app.get('/dashboard', isAuthenticated, (req, res) => {
    res.send('Selamat datang di dashboard!');
});

    

Membuat dan Memverifikasi JWT

JWT digunakan untuk mengautentikasi pengguna tanpa perlu menyimpan session di server. Kita akan mengirim token JWT ke pengguna setelah login, dan pengguna akan menyertakan token ini di setiap request berikutnya. Berikut adalah cara membuat dan memverifikasi JWT:


const jwt = require('jsonwebtoken');

// Membuat JWT setelah login berhasil
function generateToken(user) {
    return jwt.sign({ id: user.id, username: user.username }, 'secretkey', { expiresIn: '1h' });
}

// Memverifikasi JWT
function verifyToken(req, res, next) {
    const token = req.headers['authorization'];

    if (!token) return res.status(403).send('Token is required');

    jwt.verify(token, 'secretkey', (err, decoded) => {
        if (err) return res.status(403).send('Invalid token');
        req.user = decoded; // Menyimpan data pengguna dalam request
        next();
    });
}

    

Implementasi Route Login dan Register

Berikut adalah implementasi route untuk login dan register. Pada route login, jika autentikasi berhasil, kita akan mengirimkan token JWT kepada pengguna:


app.post('/login', passport.authenticate('local', { session: false }), (req, res) => {
    const token = generateToken(req.user);
    res.json({ token: token });
});

app.post('/register', (req, res) => {
    const { username, password } = req.body;

    bcrypt.hash(password, 10, (err, hashedPassword) => {
        const newUser = new User({ username, password: hashedPassword });
        newUser.save()
            .then(user => res.status(201).send('User created'))
            .catch(err => res.status(400).send('Error creating user'));
    });
});

    

Kesimpulan

Dengan menggunakan Passport.js dan JWT, kita dapat mengimplementasikan sistem autentikasi dan otorisasi yang aman dan fleksibel di aplikasi Express.js. Passport.js menyediakan berbagai strategi autentikasi, sementara JWT memungkinkan autentikasi stateless yang cocok untuk aplikasi modern. Jangan lupa untuk selalu melindungi route penting dengan middleware autentikasi dan mengelola session atau token dengan bijak.

إرسال تعليق

Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.