Membuat Authentication JWT di AdonisJS
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-apiSekarang 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 AuthSetelah 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 Usercopy 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 seedDua 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
