NodeJS Express — JWT Examples

Tolga Karabulut
4 min readFeb 13, 2021

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/www
nodejwt: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.

Yanlış kullanıcı adı şifre ile deneme
Doğru kullanım

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.

Auth olmayan kullanıcıların yaptığı istekler

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

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Tolga Karabulut
Tolga Karabulut

Written by Tolga Karabulut

Software Development Specialist | @teknasyon Developer Team

No responses yet

Write a response