admin 13
This commit is contained in:
@@ -24,25 +24,50 @@ try {
|
||||
$admin = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($admin) {
|
||||
// التحقق من كلمة المرور الهاش
|
||||
// 1. التحقق من حالة الحساب
|
||||
if ($admin['status'] === 'pending') {
|
||||
jsonError("حسابك قيد المراجعة حالياً. يرجى الانتظار للموافقة.");
|
||||
exit;
|
||||
} elseif ($admin['status'] === 'suspended') {
|
||||
jsonError("هذا الحساب معلق. يرجى التواصل مع المدير.");
|
||||
exit;
|
||||
} elseif ($admin['status'] === 'rejected') {
|
||||
jsonError("تم رفض طلب الانضمام لهذا الحساب.");
|
||||
exit;
|
||||
}
|
||||
|
||||
// 2. التحقق من كلمة المرور
|
||||
if (password_verify($password, $admin['password'])) {
|
||||
|
||||
// فك تشفير الاسم للعرض في التطبيق
|
||||
$admin['name'] = $encryptionHelper->decryptData($admin['name']) ?: $admin['name'];
|
||||
unset($admin['password']);
|
||||
|
||||
$jwtService = new JwtService($redis);
|
||||
$role = $admin['role'] ?? 'admin';
|
||||
// 3. توليد رمز تحقق OTP وإرساله عبر WhatsApp
|
||||
$otp = rand(10000, 99999);
|
||||
$phone = $admin['phone'] ?? ''; // تأكد من وجود حقل الهاتف في الجدول
|
||||
|
||||
// توليد توكن الدخول مع ربطه ببصمة الجهاز
|
||||
$jwt = $jwtService->generateAccessToken($admin['id'], $role, $audience, $fingerprint);
|
||||
if (empty($phone)) {
|
||||
// Fallback للأرقام المسموح لها إذا لم يكن الرقم مسجلاً في الجدول
|
||||
// (قد نحتاج لتحسين هذه النقطة لاحقاً)
|
||||
jsonError("رقم الهاتف غير مسجل لهذا الحساب. يرجى مراجعة الإدارة.");
|
||||
exit;
|
||||
}
|
||||
|
||||
printSuccess([
|
||||
"message" => "Login successful",
|
||||
"admin" => $admin,
|
||||
"jwt" => $jwt,
|
||||
"expires_in" => 3600
|
||||
]);
|
||||
$messageBody = "رمز التحقق الخاص بك للدخول إلى لوحة الإدارة هو: $otp";
|
||||
$success = sendWhatsAppFromServer($phone, $messageBody);
|
||||
|
||||
if ($success) {
|
||||
// حفظ الرمز في قاعدة البيانات للتحقق لاحقاً
|
||||
$stmt = $con->prepare("INSERT INTO token_verification_admin (phone_number, token, expiration_time)
|
||||
VALUES (?, ?, DATE_ADD(NOW(), INTERVAL 10 MINUTE))
|
||||
ON DUPLICATE KEY UPDATE token = VALUES(token), expiration_time = VALUES(expiration_time)");
|
||||
$stmt->execute([$phone, $otp]);
|
||||
|
||||
printSuccess([
|
||||
"status" => "otp_required",
|
||||
"message" => "تم إرسال رمز التحقق إلى WhatsApp الخاص بك.",
|
||||
"phone" => $phone
|
||||
]);
|
||||
} else {
|
||||
jsonError("فشل في إرسال رمز التحقق عبر WhatsApp.");
|
||||
}
|
||||
} else {
|
||||
jsonError("كلمة المرور غير صحيحة.");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user