Membangun API dengan Node.js Express Part 3: Membuat Controller

Belajarlah dari bawah dan nikmati prosesnya...
1280px-Node.js_logo.svg

Controller merupakan bagian logic dari aplikasi yang kita buat. Disini kita akan mendefinisakn fungsi-fungsi yang menjadi otak aplikasi. Sekarang mari kita membuat controller untuk autentikasi di aplikasi kita.

Masukkan kode berikut ke app/controllers/auth.controller.js

				
					const db = require("../models");
const config = require("../config/auth.config");
const User = db.user;
const Role = db.role;

const Op = db.Sequelize.Op;

var jwt = require("jsonwebtoken");
var bcrypt = require("bcryptjs");

exports.signup = (req, res) => {
  // Save User to Database
  User.create({
    username: req.body.username,
    email: req.body.email,
    password: bcrypt.hashSync(req.body.password, 8)
  })
    .then(user => {
      if (req.body.roles) {
        Role.findAll({
          where: {
            name: {
              [Op.or]: req.body.roles
            }
          }
        }).then(roles => {
          user.setRoles(roles).then(() => {
            res.send({ message: "User was registered successfully!" });
          });
        });
      } else {
        // user role = 1
        user.setRoles([1]).then(() => {
          res.send({ message: "User was registered successfully!" });
        });
      }
    })
    .catch(err => {
      res.status(500).send({ message: err.message });
    });
};

				
			

Kode tersebut mendefinisikan fungsi signup untuk membuat akun baru dengan default role 1. Ketika dipanggil fungsi ini akan membuat entry user baru dengan input username, email, dan password yang sudah di hash. Perlu diperhatikan bahwa penyimpanan password di database sebaiknya tidak berupa plaintext melainkan hash sehingga menjaga kerahasiaan si user dari pemegang data. Untuk menjalankan kode ini kita butuh modul tambahan yaitu bycriptjs.

Selanjutnya mari kita buat fungsi untuk signin

				
					exports.signin = (req, res) => {
  User.findOne({
    where: {
      username: req.body.username
    }
  })
    .then(user => {
      if (!user) {
        return res.status(404).send({ message: "User Not found." });
      }

      var passwordIsValid = bcrypt.compareSync(
        req.body.password,
        user.password
      );

      if (!passwordIsValid) {
        return res.status(401).send({
          accessToken: null,
          message: "Invalid Password!"
        });
      }

      var token = jwt.sign({ id: user.id }, config.secret, {
        expiresIn: 86400 // 24 hours
      });

     user.getRoles().then(roles => {
        res.status(200).send({
          id: user.id,
          username: user.username,
          email: user.email,
          roles: roles,
          accessToken: token
        });
      });
    })
    .catch(err => {
      res.status(500).send({ message: err.message });
    });
};

				
			

disini kita membuat fungsi signin yang akan mencocokan username dan hash password di database, jika sesuai, maka akan diberikan data yang tersimpan serta JWToken yang akan digunakan untuk kebutuhan autentikasi. Untuk menjalankan kode ini kita membutuhkan modul tambahan yaitu jsonwebtoken.

Install modul pada aplikasi kita dengan menjalankan line ini pada terminal

				
					npm install express jsonwebtoken bycriptjs --save
				
			

Sekarang controller kita seharusnya sudah berjalan dan hanya perlu dipanggil. Setelah ini kita akan mempelajari membuat route

Terima kasih sudah membaca, semoga harimu bahagia

Leave a Reply

Your email address will not be published. Required fields are marked *

×

Hello!

Silahkan bergabung dengan Komunitas Sekolah Siber

× Bantuan