2017-09-19 1 views
0

wie dies auf die Politik für einen Scheck in Laravel zugelassen in einem Controller:Anzeigefehler durch Ajax wenn Aktion nicht 5.1

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

in der Dokumentation für 5.1 können wir lesen:

Wenn die Aktion ist autorisiert, wird der Controller weiterhin normal ausgeführt; Wenn die autorisierende Methode jedoch feststellt, dass die Aktion nicht autorisiert ist, wird automatisch eine HttpException ausgelöst, die eine HTTP-Antwort mit einem 403 Not Authorized Statuscode generiert. Wie Sie sehen können, ist die authorize-Methode eine bequeme, schnelle Methode, um eine Aktion zu autorisieren oder eine Ausnahme mit einer einzelnen Codezeile auszulösen.

Und ok, das löst eine Ausnahme aus und stoppt genau dort die Ausführung des Rests des Codes. Das Problem ist, dass dies im Hintergrund passiert und der Benutzer nicht weiß, was vor sich geht. Also, was ich tun möchte, ist eine Meldung im laufenden Betrieb (über Javascript), wenn die Aktion Autorisierung fehlschlägt. Ich denke, um das zu tun, muss ich die Idee, die Laravel wirft, einfangen und dann das Ergebnis an meine Ajax-Funktion senden.

zB
if ('status' == 403) { 

$auth = 0 

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

} 

und dann in meinem Ajax-Funktion Scheck über $ auth .. oder ist es eine Möglichkeit, die Ausnahme zu senden, um tha Ajax-Funktion direkt nach der Autorisierung fehlschlägt?

Antwort

0

Wie Sie sehen, wird Laravel automatisch die Anfrage abbrechen und mit dem richtigen HTTP-Fehlercode 403 Unauthorized antworten. Dies ist auch bei AJAX-Anfragen der Fall.

Die meisten AJAX-Bibliotheken wie jQuery oder Axios können HTTP-Fehlercodes sehr gut verarbeiten. Sie können für den Fehlercode 403.

Zum Beispiel in jQuery anschauen:

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