Menggunakan jsonwebtoken di expressjs

Saya akan share cara sederhana melakukan login dengan token di expressjs, ini berguna untuk membuat login di angularjs

1. melakukan generate express dengan cara "express namaproject" (kalau belum install express-generator silahkan install) cara nya lihad sini <a href='https://www.npmjs.com/package/express-generator'>https://www.npmjs.com/package/express-generator</a> 2. buka folder "namaproject" terus edit file package.json dan ganti dengan

{
  "name": "express-jwt",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.1",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "ejs": "~2.4.1",
    "express": "~4.13.4",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0",
    "mongoose": "*",
    "jsonwebtoken": "*"
  }
}

3. ketik "npm install" di cmd atau terminal 4. membuat folder "mongodb" terus buat file "mongo.js" di dalam folder mongodb 5. buka file mongo.js dan isikan

var mongoose = require('mongoose');
var db = mongoose.connection,
    Schema = mongoose.Schema;
// #mongodb:0 config untuk menghubungkan database mongodb
mongoose.connect('mongodb://localhost:/belajar');

var SchemaUsers = new Schema({
  username: String,
  password: String
});
exports.users = db.model('users', SchemaUsers);

6. buka users.js di folder routes dan ganti dengan ini isi nya

var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var mongoose = require('mongoose');
var db = require('../mongodb/mongo');

/* GET users listing. */
// #routes:10 function untuk mengecek token
function isAuthenticated(req, res, next){
  var token = req.body.token || req.query.token || req.headers.authorization; // mengambil token di antara request
  if(token){ //jika ada token
    jwt.verify(token, 'jwtsecret', function(err, decoded){ //jwt melakukan verify
      if (err) { // apa bila ada error
        res.json({message: 'Failed to authenticate token'}); // jwt melakukan respon
      }else { // apa bila tidak error
        req.decoded = decoded; // menyimpan decoded ke req.decoded
        next(); //melajutkan proses
      }
    });
  }else { // apa bila tidak ada token
    return res.status(403).send({message: 'No token provided.'}); // melkukan respon kalau token tidak ada
  }
}

// #routes:0 membuat router ke url "<a href='http://localhost:3000/users/login'>http://localhost:3000/users/login</a>"
router.post('/login', function(req, res, next) {

  db.users.findOne({username:req.body.username}, function(err,data){ //mencari data
    if (data) { // apabila menemukan
      if (data.password === req.body.password) { //apabila data password sama dengan user password

        var token = jwt.sign(data, 'jwtsecret', { // melakukan generate token di jwt
          algorithm: 'HS256'
        });

        res.json({message:'berhasil login', token: token});

      }else { //apabila salah password
        res.json({message:'password salah'});
      }
    }else { //apabila username tidak di temukan
      res.json({message:'username tidak di temukan'});
    }
  });

});

// #routes:20 router kusus buat yang sudah login atau sudah punya token
router.get('/private', isAuthenticated, function(req, res, next){
  res.json({message:'halaman harus menggunakan token'});
});
// #routes:30 router yang bersifat public atau bisa di akses semua orang
router.get('/public', function(req, res, next){
  res.json({message:'halaman bisa di akses siapa saja'});
});

module.exports = router;

dan silahkan coba buka link <a href='http://localhost:3000/users/login'>http://localhost:3000/users/login</a> untuk login <a href='http://localhost:3000/users/private'>http://localhost:3000/users/private</a> hanya bisa di buka dengan token <a href='http://localhost:3000/users/public'>http://localhost:3000/users/public</a> bisa di buka semua orang ini contoh todolist note: apa bila ada kesalahan di mohon lapor

avatar ardyhim
@ardyhim

289 Kontribusi 175 Poin

Dipost 8 tahun yang lalu

Belum ada Jawaban. Jadi yang pertama Jawaban

Login untuk ikut Jawaban