Mengatasi Masalah Cannot Handle Token Prior pada Google Sign In Web Laravel
Mengatasi Error Cannot Handle Token Prior menggunakan Google Sign In Web pada Laravel
Hello fellas! Kembali lagi nih, setelah mager-mageran nulis tutorial kali ini gue mau membahas masalah Google Sign in pada Web.
Tutorial ini adalah tutorial yang diperuntukkan bagi developer yang sudah mencoba Google Sign-in for websites dan mendapatkan error “Cannot Handle Token Prior at (timestamp)”.
Masalah ini muncul ketika Google memutuskan untuk men-shut down Google+ pada 7 Maret 2019, hal ini berdampak kepada API-nya juga yang dimatikan oleh Google, nah karena pada Socialite kita menggunakan API Google+ yaitu method plus.people.get maka kita ngga akan bisa login lagi nih pake Google.
Nah yang jadi permasalahannya adalah, kita harus menggunakan Google Sign In Web yang pake Javascript, sehingga kalo kita klik nanti akan ngebuka windows sendiri.
Nah untuk caranya, saya ngga akan bahas di tutorial ini karena di dokumentasinya pun sudah cukup jelas sehingga kamu bisa ikutin step by step, tapi kalo ada request ke saya yaudah nanti saya bantu buatin tutorialnya untuk Laravel ehehehe.
Nah yang jadi masalahnya adalah ketika kalian mempunyai Hosting yang waktunya ngga sama kaya waktu App, atau mungkin waktu di DB nya ngga ngikutin sistem, atau sistemnya UTC+8, sedangkan web kalian UTC+7.
Bentar lagi ada yang komen nih “Yaelah bang kan tinggal diganti aja timezone app-nya”, saya kan dah coba nih, tapi ngga bisa, mungkin agan lebih jago ya sok atuh, saya disini coba bantu kasih solusi lain saja ^^.
Nah permasalahan seperti ini menyebalkan sekali, kenapa? Dampaknya seperti ini
Ketika di local sih pasti ngga akan masalah, beda cerita ketika kita lepas ke server. Karena jam server kan tentu beda sama jam app kita sehingga ngga bisa nyamain, dan saya juga ngga setuju kalo harus pake jam server karena saya maunya timezone Asia/Jakarta saat di save ke DB.
Kenapa bisa gini? JWT ini kan ngelempar jam server kita, dan ini perlu dilakukan verifikasi ke server Google, apakah token ini valid dan dicek pula jam aksesnya, yang jadi masalah adalah kalo jam server kita rada beda nih sama jam request app kita.
Nah ada solusinya, solusinya adalah ketika kalian melakukan autentikasi token yang didapatkan (Di Controller tentunya), kalian melakukan step by step dibawah ini:
pertama, download library yang dibutuhkan yaitu Google Client
composer require google/apiclient:"^2.0"
kedua, kita masukkan kode dibawah ini.
$client = new Google_Client();
$jwt = new JWT();//Waktu yang dimaklumi.
$jwt::$leeway += 1.5;$verify = new Google_AccessToken_Verify($client->getHttpClient(), null, $jwt);//Masukkan aud jika punya pada bagian null
$payload = $verify->verifyIdToken($token, null);if($payload){
//Code setelah token berhasil diverifikasi
}
Kebanyakan error yang terjadi pada penggunaan ini adalah cannot handle token prior yang disebabkan waktu jam server kita berbeda, nah cara untuk membuat agar waktu kita dimaklumi adalah dengan mengubah Leeway value. Default leeway value di JWT adalah 0 dan satuannya adalah detik. Kita dapat mengubahnya menjadi 1.5 apabila server kita kecepetan 1.5 detik, kalo saya sih ngubahnya ke 3600 karena waktu server saya bedanya 1–2 jam kalo ngga salah (Maklum, hosting).
pada baris leeway juga bisa dicoba dengan ini
$jwt::$leeway += 1.5;
atau diubah menjadi
$jwt::$leeway = 1.5;
Keduanya sama aja.
Nah kalo udah berhasil nanti metode loginnya kaya gini.
Semoga membantu ^^