Membuat Authentikasi JWT di golang #2

Pada artikel sebelumnya Membuat Authentikasi JWT di golang #1 kita telah membuat file domain, repository, dan helper.

Membuat file DTO

Kita lanjut membuat file DTO yang kita gunakan untuk transfer data struct antara usecase dan handler.

Buat file token.go kemudian simpan di direktori entities/DTO. Kita akan membuat dto untuk menghandle response dan request token.

[gist id=”7d04da63cfe0ee23783e39a78dbf6722″]

Kemudian buat 1 file lagi yaitu user.go dalam direktori yang sama. Kita akan membuat struct untuk menerima request yang berupa email dan password.

[gist id=”5eff66580dc62eb712fdbf021c5af31a”]

Membuat file usecase

Setelah kita membuat file file dto, waktunya kita membuat file file usecase, kita hanya membuat 1 file usecase yaitu main_user.go letakan di direktori services/user/usecase.

[gist id=”0968f2baa795a0924c16e02b8979aed7″]

File ini berisi 2 method yaitu Authentication dan refresh token. Kita menggunakan library dari crypto/bcrypt untuk mencocokkan password hash dan text.

Membuat file handler

Selanjutnya kita membuat file yang akan menghandle request dan response. Buat file handler.go lalu simpan di interface/http.

[gist id=”871fc4d2a8f0841ce11055807e06238c”]

Pada handler kali ini kita memanfaatkan gin untuk membuat routing dan validator v10 untuk memvalidasi payload request.

Pada file ini kita membuat 2 endpoint yaitu /auth untuk melakukan authentikasi dan /refresh-token untuk meminta access token.

Membuat file main

Akhirnya kita tiba di rangkaian paling akhir yaitu membuat file inisialisasi yaitu package main.

Buat file main.go lalu letakkan pada direktori app/main.go.

[gist id=”5ccdc09d701e201ca94b96d4032ecc84″]

Pada variabel dsn sesuaikan konfigurasi dengan local machine anda, untuk host, username, password dari databse anda.

Kesimpulan

Pembuatan authentikasi menggunakan JWT pada golang ini memang menarik karena kita tidak memerlukan database untuk menyimpan token. Kita hanya mencocokkan antara encrypted text dan chipper text dengan kunci pada JWT.