step 23 : fix check isTokenExpired > 3 menit refreshToken
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user