Daftar dan Belajar Sekarang!

Menggunakan jsonwebtoken di expressjs

foto ardyhim
289 Kontribusi 172 Coto
3 tahun yang lalu
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 https://www.npmjs.com/package/express-generator 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 "http://localhost:3000/users/login"
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 http://localhost:3000/users/login untuk login https://skspace.sgp1.digitaloceanspaces.com/forums/images/login.png http://localhost:3000/users/private hanya bisa di buka dengan token https://skspace.sgp1.digitaloceanspaces.com/forums/images/private.png http://localhost:3000/users/public bisa di buka semua orang https://skspace.sgp1.digitaloceanspaces.com/forums/images/public.png ini contoh todolist https://skspace.sgp1.digitaloceanspaces.com/forums/images/todo.png note: apa bila ada kesalahan di mohon lapor


Login untuk diksusi di forum sekolah koding