Membuat Authentication JWT di AdonisJS

Muhammad Zakuan
Sep 2, 2018 · 2 min read

Tulisan saya kali ini merupakan kelanjutan tulisan saya sebelumnya yang dapat anda kunjungi di

https://medium.com/@zackstam/membuat-base-api-sederhana-dengan-framework-adonis-4-1-a332978bc94

Nah pada tulisan kali ini kita akan membuat autentikasi dengan JWT. Sebelum memulai silahkan download file project yang akan kita buat sistem autentikasinya di

https://github.com/zackstam/school-api

Sekarang kita buat route untuk login dengan copy paste code berikut ke file routes.js

Route.group(() => {Route.post('login', 'AuthController.postLoginJwt').as('loginJwt')}).prefix('api/auth')

Buat file Auth controller untuk handling route login dengan menjalankan perintah berikut

adonis make:controller Auth

Setelah controller Auth dibuat, copy paste method berikut ke dalam class Auth

async postLoginJwt({ request, auth }) {const { email, password } = request.all()return auth.authenticator('jwt').withRefreshToken().attempt(email, password)}

Sekarang route untuk login dan handling di controllernya udah kita buat. Langkah selanjutnya kita coba apa yang sudah kita buat. Untuk itu bikin seeder user untuk login. Jalankan perintah berikut untuk membuat seeder login

adonis make:seed User

copy paste object user berikut ke dalam file database/seeds/UserSeeder.js

const u1 = new User()u1.username = 'usersatu'u1.password = 'pass-u1'u1.email = 'u1@mail.com'await u1.save()const u2 = new User()u2.username = 'userdua'u2.password = 'pass-u2'u2.email = 'u2@mail.com'await u2.save()

Kemudian jalankan perintah berikut untuk menginput seeder user di atas ke dalam database

adonis seed

Dua user sudah kita masukkan ke database untuk login ke sistem. Buka insomnia ataupun postman untuk mengetes sistem autentikasi yang sudah kita buat. Kemudian setting url dan json dengan struktur berikut

Klik send maka, maka anda akan mendapati return token dan refresh token dengan tipe bearier

Mengecek autentikasi di setiap request api

Setelah handling autentikasi kita buat, sekarang kita akan membuat hanya user yang sudah terautentikasi saja yang bisa melakukan request ke api. Sehingga si user diharuskan login terlebih dahulu untuk melakukan request data.

Caranya sangat mudah, tambahkan middleware berikut ke setiap route yang akan ditambahkan autentikasinya sehingga route dari student akan tampak seperti berikut

Route.group(() => {Route.get('students', 'StudentController.index').middleware(['auth:jwt'])Route.get('students/:id', 'StudentController.show').middleware(['auth:jwt'])Route.post('students', 'StudentController.store').middleware(['auth:jwt'])Route.put('students/:id', 'StudentController.update').middleware(['auth:jwt'])Route.delete('students/:id', 'StudentController.delete').middleware(['auth:jwt'])}).prefix('api/v1')

Untuk mengetesnya, pada insomnia atau postman bagian auth tentukan autentikasi dengan tipe bearer kemudian copy paste token yang diperoleh setelah login ke dalam field token seperti berikut

    Muhammad Zakuan

    Written by

    Based on Yogyakarta

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade