NodeJS Express — JWT Examples
Herkese Merhaba 👋
Bu yazıda sizlere Express Framework üzerinden Json Web Token(JWT) nin nasıl kullanılacağını anlatacağım. Daha önce “Laravel JWT Example” yazımda JWT yi genel hatlarıyla da açıklamıştım. Diğer detayları buradan inceleyebilirsiniz. Burada detaya girmeden anlatacağım.

Öncelikle bir express projesi oluşturmamız gerekiyor ben bunun için bir generator kullanıyorum. Kurulumunu yapalım.
Test Ortamı
~ node -v (v15.1.0)
~ npm -v (7.5.4)npm install -g express-generator
şimdide projemizi oluşturalım.
express nodejwt && cd nodejwt
Projemize JWT kütüphanesini dahil edelim. Kütüphanenin tüm detaylarına buradan ulaşabilirsiniz.
npm i express-jwt
Öncelikli olarak bir tane route dosyası oluşturuyoruz ve içini şu şekilde güncelliyoruz.
const express = require('express');
const router = express.Router();
/* GET home page. */
router.get('/users', function(req, res, next) {
const fakeUsers = [
{
name: "Tolga Karabulut",
gender: "male",
age: 27,
email: "tolga.karabulut@medianova.com"
},
{
name: "Jhon Doe",
gender: "male",
age: 30,
email: "jhon.doe@example.com"
}
];
res.json( fakeUsers ).status(200);
});
module.exports = router;
Oluşturduğumuz route dosyamızı projemize ekliyoruz.
const apiRouter = require('./routes/api');
...
const app = express();
....
app.use('/api/v1', apiRouter);
Burada dikkat etmemiz gereken konu sisteme diğer dahil olan Middleware lardan sonra app.use ile çağırmamız gerekiyor. Şimdi Postman üzerinden hızlıca sistemi test ediyoruz. Öncelikle projemizi çalıştıralım.
DEBUG=nodejwt:* npm start
> nodejwt@0.0.0 start
> node ./bin/wwwnodejwt:server Listening on port 3000 +0ms
Şimdide “GET” isteğimizi yapalım.

Evet sistemimiz çalışıyor. Şimdi kullanacağımız kütüphanelerimizi ekliyoruz.
npm i jsonwebtoken
npm i express-jwt
şimdi route dosyamızı aşağıdaki gibi düzenliyoruz.
#_ routes/api.js const express = require('express');
const router = express.Router();
/**
* Kullandığımız Kütüphaneleri ekliyoruz.
*/
const expressJwt = require('express-jwt');
const jwt = require('jsonwebtoken');
/**
* JWT oluştururken kullandığımız gizli anahtarımız.
*/
const secretKey = "topSecretKey";
/**
* JWT Middleware
*/
router.use(
expressJwt(
{
secret: secretKey
, algorithms: ['HS256']
}
)
.unless(({path: ['/api/v1/login']})));
/**
* @GET users
*/
router.get('/users', function (req, res, next) {
const fakeUsers = [
{
name: "Tolga Karabulut",
gender: "male",
age: 27,
email: "tolga.karabulut@medianova.com"
},
{
name: "Jhon Doe",
gender: "male",
age: 30,
email: "jhon.doe@example.com"
}
];
res.json(fakeUsers).status(200);
});
/**
* Basit bir login işlemi
*/
router.post('/login', (req, res) => {
if (
req.body.username !== 'admin'
&& req.body.password !== 'password'
) {
res.json(
{message: 'Username and password invalid'}
)
.status(400);
}
const token = jwt.sign(
{name: req.body.username}
, secretKey
, {expiresIn: 60 * 2, algorithm: 'HS256' }
);
res.json({"_token": token});
});
module.exports = router;
Şimdi kodu inceleyelim. Öncelikle require(“”) ile kullanacağımız kütüphaneleri ekledik sonrasında buraya gelen istekleri doğrulamadan geçirebilmek için bir Middleware yazdık.
/**
* JWT Middleware
*/
router.use(
expressJwt(
{
secret: secretKey
, algorithms: ['HS256']
}
)
.unless(({path: ['/api/v1/login']})));
Burada kullancağımız algoritmayı belirttik. Unless fonksiyonu içerisinde JWT doğrulamasının yapılmayacağı yolları ekliyoruz. Biz burada login işleminde bir doğrulama yapmacağımız için login yolunu ekledik.
/**
* Basit bir login işlemi
*/
router.post('/login', (req, res) => {
if (
req.body.username !== 'admin'
&& req.body.password !== 'password'
) {
res.json(
{message: 'Username and password invalid'}
)
.status(400);
}
const token = jwt.sign(
{name: req.body.username}
, secretKey
, {expiresIn: 60 * 2, algorithm: 'HS256' }
);
res.json({"_token": token});
});
Burada basit bir login işlemi yapıyoruz. ExpiresIn ile token ne kadar geçerli olacağını söylüyoruz ve payload kısmına kullanıcıya ait bilgileri ekliyoruz. Şimdi login işlemimizi test edelim.


Gördüğünüz gibi doğru kullanıcı adı ve şifre gönderdiğimizde bize sistem token üretip gönderdi. Şimdi de token olmadan “users” route a ulaşmaya çalışalım.

Gördüğünüz gibi bir token göndermediğimiz için bize 401 — Unauthorized cevabı döndü. Şimdi de doğru token ile istek yapıp sonuca bakalım.

ve kullanıcı listesini başarı ile aldık. Diğer kullanımlar için kullandığımız kütüphanelerin dökümantasyonunu inceleyebilirsiniz.
#Kütüphaneler
Herkese iyi kodlamalar :)
Tolga Karabulut
tolga.karabulut@medianova.com
Medianova CDN | Senior PHP Developer