Hai hai mumpung lagi bikin project baru pake Nuxtjs, sekalian bikin postingan tentang auth module di Nuxtjs. Nah dari beberapa kasus ada temen temen yang tanya ke saya mengenai authentikasi di nuxtjs itu seperti apa, apakah dilakukan secara manual atau mungkin ada package / library yang bisa memudahkan? Saya bilang ada, silakan coba install Auth module nya Nuxtjs. Silakan baca docs dulu kesini.
Alasan kenapa saya bikin postingan ini adalah karena mungkin bagi para pemula Nuxtjs kadang ketika pake module ini agak kebingungan harus bagaimana cara pake nya. Saya akan coba untuk jelasin gimana sih package ini bekerja, dan saya akan jelasin sesederhana mungkin ya, untuk settingan yang lebih advance bisa langsung coba sendiri sambil ber eskperimen.
Auth module ini bekerja secara global (bisa juga per component sih), ketika kita berpindah halaman maka secara otomatis auth module ini menjalankan auth middleware nya dengan cara memeriksa apakah user sudah login atau belum (token disimpan di cookies), jika di cookies kosong (ga ada token, atau mungkin expired) maka module ini secara otomatis akan me-redirect kita ke halaman login. Nah mungkin ada yang bertanya, trus data data user nya disimpan dimana? Bebas disimpan dimana, tapi untuk saya pribadi lebih suka simpan di vuex, jadi ketika user melakukan refresh halaman, auth module ini melakukan get data user yang kemudian datanya disimpan di vuex.
Pertama install dulu dong
$ yarn add @nuxtjs/auth @nuxtjs/axios
Kenapa kok install axios juga? Yap karena auth module menggunakan axios untuk proses authentication nya. Kemudian di file nuxt.config.js tambahin ini
modules: [ '@nuxtjs/axios', '@nuxtjs/auth' ],
router: {
middleware: ['auth']
},
Sampai sini settingan dasar udah beres, setelah itu kita atur mau pakai strategi yang bagaimana. Strategi yang paling gampang begini aja sih, silakan kalau temen temen mau kustomisasi lebih jauh lagi
auth: {
redirect: {
login: '/login',
home: '/',
logout: '/login'
},
strategies: {
local: {
endpoints: {
login: {
url: '/api/login',
method: 'post',
propertyName: 'api_token'
},
user: {
url: '/api/user/details',
method: 'get',
propertyName: 'user'
},
logout: {
url: '/api/logout',
method: 'post'
}
}
}
},
token: {
name: 'token'
},
cookie: {
name: 'token'
}
},
Penjelasannya sebagai berikut
Pada element redirect, tentukan dimana halaman login, home, logout nya. Jadi ketika user belum terotentikasi, maka diarahkan ke halaman login. Jika user sudah terotentikasi, langsung lempar ke halaman home. Dan juga kalau user udah berhasil logout, langsung diarahkan ke halaman login lagi.
Pada strategies, saya menggunakan local yang mana authentikasi nya memakai backend kita sendiri. Kalau pengen pake OAuth juga bisa, cek aja sendiri di docs nya :D. Disini terbagi menjadi 3 endpoint, yaitu
Kenapa perlu bikin vuex store? Karena Auth module ini akan bekerja dengan menggunakan vuex untuk menyimpan state auth nya. Bikin simple saja untuk awal, nanti bisa dikembangkan sendiri.
import Vuex from 'vuex';
const createStore = () =>
new Vuex.Store ({
// ini tempate module / getter / setter / state / actions
})
export default createStore;
Untuk proses login, pake method begini
this.$auth
.loginWith("local", {
data: {
name: this.username,
password: this.password
}
})
.catch(() => {
console.log('gagal');
});
Untuk logout tinggal gini aja, easy..
this.$auth.logout();
Untuk ngambil data yang didapat dari backend (masih inget gak? Ketika refresh kan kita dapet tuh data data user nya).
console.log(this.$auth.user);
Catatan : Auth module akan selalu memeriksa this.$auth.user
, so pastikan ketika kalian fetch user data, return response nya harus didalam elemen user. Sebagai contoh jika kalian menggunakan Laravel di backend nya. Return response nya harus begini
return response()->json(['user' => Auth::user()]);
Kalo this.$auth.user
ga ada isinya, maka auth module ini akan menganggap bahwa kalian belum login, jadi kalian akan selalu di redirect ke halaman login.
Nah demikian postingan kali ini, singkat sih dan sederhana. Kalau temen temen pembaca pengen mengimplementasikan yang lebih pro lagi, silakan mampir aja di docs nya. Yang penting kita tau dulu gimana cara kerjanya module ini dan gimana cara pake nya sesederhana mungkin. Suwun wes mampir rek :D