| @@ -102,9 +102,9 @@ | ||
| 102 | 102 | public function get_token() |
| 103 | 103 | { |
| 104 | 104 | // Vérifier que les données POST existent |
| 105 | 105 | if (!isset($_POST['nonce'])) { |
| 106 | - wp_send_json_error('Missing required data'); | |
| 106 | + wp_send_json_error('Missing required data', 400); | |
| 107 | 107 | } |
| 108 | 108 | |
| 109 | 109 | // Déséchapper et assainir les données |
| 110 | 110 | $nonce = sanitize_text_field(wp_unslash($_POST['nonce'])); |
| @@ -110,9 +110,19 @@ | ||
| 110 | 110 | $nonce = sanitize_text_field(wp_unslash($_POST['nonce'])); |
| 111 | 111 | |
| 112 | 112 | // Vérifier le nonce |
| 113 | 113 | if (!wp_verify_nonce($nonce, 'aibui_nonce')) { |
| 114 | - wp_die('Security check failed'); | |
| 114 | + // wp_die() répondrait une page HTML avec un statut 200 : le client JS | |
| 115 | + // ne peut ni la parser ni la distinguer d'un vrai échec. On renvoie du | |
| 116 | + // JSON + 403 pour qu'il affiche « session expirée, rechargez la page » | |
| 117 | + // plutôt qu'une erreur générique. | |
| 118 | + wp_send_json_error( | |
| 119 | + array( | |
| 120 | + 'code' => 'nonce_expired', | |
| 121 | + 'message' => 'Security check failed: the WordPress nonce has expired.', | |
| 122 | + ), | |
| 123 | + 403 | |
| 124 | + ); | |
| 115 | 125 | } |
| 116 | 126 | |
| 117 | 127 | // Récupérer le token JWT |
| 118 | 128 | $token = get_option('aibui_jwt_token', ''); |