2017-09-19 1 views
0

pour un contrôle sur la politique comme celui-ci dans un contrôleur:erreur d'affichage par ajax si l'action est pas autorisée dans Laravel 5.1

$this->authorize('user', $post); 

dans la documentation pour 5.1, nous pouvons lire:

Si l'action est autorisé, le contrôleur continuera à s'exécuter normalement; Toutefois, si la méthode authorize détermine que l'action n'est pas autorisée, une exception HttpException sera automatiquement générée, ce qui génère une réponse HTTP avec un code d'état 403 Non autorisé. Comme vous pouvez le voir, la méthode authorize est un moyen pratique et rapide d'autoriser une action ou de lancer une exception avec une seule ligne de code.

Et ok qui jette une exception et arrête là l'exécution du reste du code. Le problème est que cela se passe en arrière-plan et l'utilisateur ne sait pas ce qui se passe. Donc, ce que je veux faire est de montrer un message à la volée (via javascript) si l'action échoue autorisation. Je pense que peut-être pour faire cela, je dois attraper l'esquisse que Laravel lance et puis envoyer le résultat à ma fonction ajax. par exemple

if ('status' == 403) { 

$auth = 0 

return Response()->json($auth); 

} 

puis dans mon chèque de fonction ajax pour $ auth .. ou est-il un moyen d'envoyer l'exception à tha ajax fonction directement après autorisation échoue?

Répondre

0

Comme vous le voyez, Laravel interrompra automatiquement la demande et répondre avec le code d'erreur HTTP 403 appropriée non autorisée. C'est également le cas avec les requêtes AJAX.

La plupart des bibliothèques AJAX comme jQuery ou Axios peut gérer les codes d'erreur HTTP très bien. Vous pouvez simplement rechercher le code d'erreur 403.

Par exemple, dans jQuery:

$.ajax('/whatever', { 
    // ... 
    error: function (xhr) { 
     if (xhr.status == 403) { 
      alert('Unauthorized'); 
     } 
    } 
});