Update: 2026-08-08 13:33:53

This commit is contained in:
Hamza-Ayed
2026-08-08 13:33:54 +03:00
parent fae0e4a38a
commit c8e8e481a6
7 changed files with 362 additions and 141 deletions
@@ -10,6 +10,7 @@ import '../../../main.dart';
import '../../../views/widgets/error_snakbar.dart';
import '../../firebase/notification_service.dart';
import '../../functions/crud.dart';
import 'login_captin_controller.dart';
class OtpVerificationController extends GetxController {
final String phone;
@@ -95,6 +96,25 @@ class OtpVerificationController extends GetxController {
response != 'no_internet') {
Log.print('response (already decoded): ${response}');
// ═══════════════════════════════════════════════════════════
// التحقق نجح ⇒ السيرفر ربط بصمة هذا الجهاز وأصدر توكن driver.
// نحفظه فوراً: هو التوكن الوحيد الذي يملك صلاحيات بعد تغيير
// الجهاز، وبدونه تبقى كل الطلبات على 403.
// ═══════════════════════════════════════════════════════════
final issuedJwt = (response is Map && response['message'] is Map)
? response['message']['jwt']?.toString()
: null;
if (issuedJwt != null && issuedJwt.isNotEmpty) {
await storage.write(key: BoxName.jwt, value: issuedJwt);
LoginDriverController.needsDeviceVerification = false;
Log.print('🔑 تم حفظ توكن driver بعد تحقق تغيير الجهاز.');
} else {
// السيرفر لم يرجع توكناً — نطلب واحداً الآن بعد أن صارت
// البصمة مربوطة، وإلا دخل الكابتن بتوكن بلا صلاحيات.
LoginDriverController.needsDeviceVerification = false;
await Get.put(LoginDriverController()).getJWT(force: true);
}
// توجه إلى الصفحة التالية
await CRUD().post(
link: AppLink.addTokensDriver,
@@ -104,15 +124,19 @@ class OtpVerificationController extends GetxController {
'captain_id': box.read(BoxName.driverID).toString(),
});
await NotificationService.sendNotification(
target: ptoken.toString(),
title: 'token change'.tr,
body: 'token change'.tr,
isTopic: false,
tone: 'cancel',
driverList: [],
category: 'token change',
);
// إشعار الجهاز القديم — يُرسل فقط إذا عرفنا توكنه. عند دخول جهاز
// جديد لا نملك ptoken (تعذّر جلبه بلا صلاحيات) فنتخطّاه.
if (ptoken.isNotEmpty) {
await NotificationService.sendNotification(
target: ptoken,
title: 'token change'.tr,
body: 'token change'.tr,
isTopic: false,
tone: 'cancel',
driverList: [],
category: 'token change',
);
}
Get.offAll(() => HomeCaptain());
} else {