step 23 : fix check isTokenExpired > 3 menit refreshToken

This commit is contained in:
sindhu
2025-02-27 01:25:19 +07:00
parent a28830deb0
commit b723dc4596
4 changed files with 62 additions and 125 deletions

View File

@@ -88,23 +88,30 @@ class NoLoginHomeScreen extends HookConsumerWidget {
final userId = currentUser?.client_id ?? "";
final expireDate = currentUser?.expire_date ?? "";
if (await isTokenExpired()) {
if (await isTokenExpired() == true) {
print("Token expired, refreshing...");
ref.read(noLoginRefreshTokenProvider.notifier).refreshToken(
client_id: userId,
host: host,
expire_date: expireDate,
);
}
// Ambil data riwayat scan setelah token diperbarui
ref.read(noLoginRiwayatScanProvider.notifier).noLoginRiwayatScan(
host: host,
userId: userId,
token: ref.read(noLoginCurrentUserProvider)?.token ?? "",
expire_date:
ref.read(noLoginCurrentUserProvider)?.expire_date ?? "",
);
ref.read(noLoginRiwayatScanProvider.notifier).noLoginRiwayatScan(
host: host,
userId: userId,
token: ref.read(noLoginCurrentUserProvider)?.token ?? "",
expire_date:
ref.read(noLoginCurrentUserProvider)?.expire_date ?? "",
);
} else {
ref.read(noLoginRiwayatScanProvider.notifier).noLoginRiwayatScan(
host: host,
userId: userId,
token: ref.read(noLoginCurrentUserProvider)?.token ?? "",
expire_date:
ref.read(noLoginCurrentUserProvider)?.expire_date ?? "",
);
}
}
return GestureDetector(
@@ -212,20 +219,20 @@ class NoLoginHomeScreen extends HookConsumerWidget {
child: Column(
children: [
// DEBUG
Text(currentUser?.token ?? ""),
SizedBox(
height: Constant.getActualYPhone(
context: context,
y: 24,
),
),
Text(currentUser?.expire_date ?? ""),
SizedBox(
height: Constant.getActualYPhone(
context: context,
y: 24,
),
),
// Text(currentUser?.token ?? ""),
// SizedBox(
// height: Constant.getActualYPhone(
// context: context,
// y: 24,
// ),
// ),
// Text(currentUser?.expire_date ?? ""),
// SizedBox(
// height: Constant.getActualYPhone(
// context: context,
// y: 24,
// ),
// ),
// DEBUG
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,

View File

@@ -121,7 +121,6 @@ class NoLoginNotifier extends StateNotifier<NoLoginState> {
required String host,
required String password,
}) async {
try {
state = NoLoginStateLoading();
final resp = await NoLoginAuthRepository(
dio: ref.read(dioProvider),
@@ -135,43 +134,19 @@ class NoLoginNotifier extends StateNotifier<NoLoginState> {
// Simpan ke SharedPreferences
final shared = await SharedPreferences.getInstance();
String expireDateStr = resp.expire_date;
// Pastikan format ISO 8601 dengan "T"
if (!expireDateStr.contains("T")) {
expireDateStr = expireDateStr.replaceFirst(" ", "T");
}
// Cek apakah expire_date valid
try {
DateTime.parse(expireDateStr);
} catch (e) {
print(
"❌ Format expire_date tidak valid: $expireDateStr, menggunakan waktu default.");
expireDateStr = DateTime.now().toIso8601String();
}
// Simpan token dalam format JSON
final token = jsonEncode({
"expire_date": resp.expire_date,
"host": host,
"date": DateTime.now().toIso8601String(),
"token": resp.token,
"client_id": resp.client_id,
"expire_date": expireDateStr,
"isLogin": resp.isLogin,
});
await shared.setString(Constant.bearerName, token);
ref.read(noLoginCurrentUserProvider.notifier).state = resp;
print("✅ Token berhasil disimpan ke SharedPreferences!");
} catch (e) {
if (e is BaseRepositoryException) {
state = NoLoginStateError(message: e.message);
} else {
state = NoLoginStateError(message: e.toString());
}
}
}
}

View File

@@ -141,50 +141,19 @@ class NoLoginRefreshTokenNotifier
expire_date: expire_date,
);
print("📌 Token diperbarui: ${resp.token}");
print("📌 Expire date dari API: ${resp.expire_date}");
// Cek apakah expire_date dari API null atau kosong
if (resp.expire_date == null || resp.expire_date.isEmpty) {
print("❌ Error: expire_date dari API kosong!");
return;
}
// Konversi format expire_date ke ISO 8601
String expireDateStr = resp.expire_date.replaceFirst(" ", "T");
// Validasi apakah expire_date dapat dikonversi ke DateTime
try {
DateTime parsedExpireDate = DateTime.parse(expireDateStr);
print("✅ expire_date berhasil dikonversi: $parsedExpireDate");
} catch (e) {
print("❌ Error parsing expire_date: $e");
return;
}
// Simpan token ke SharedPreferences
final shared = await SharedPreferences.getInstance();
// await shared.setString("expire_date", expireDateStr);
print("✅ expire_date berhasil disimpan: $expireDateStr");
final tokenData = jsonEncode({
"expire_date": resp.expire_date,
"host": host,
"date": DateTime.now().toString(),
"token": resp.token,
"client_id": resp.client_id,
"expire_date": expireDateStr,
"isLogin": resp.isLogin,
});
await shared.setString(Constant.bearerName, tokenData);
print("✅ Token data berhasil diperbarui: $tokenData");
// Cek ulang apakah expire_date berhasil disimpan dengan benar
String? cekExpireDate = shared.getString("expire_date");
print(
"📌 expire_date yang tersimpan di SharedPreferences: $cekExpireDate");
ref.read(noLoginCurrentUserProvider.notifier).state = resp;
state = NoLoginRefreshTokenStateDone(model: resp);
} catch (e) {