Comment retourner 403 réponse au format JSON dans Laravel 5.2?
Je suis en train de développer une API RESTful avec Laravel 5.2. Je suis tombé sur la façon d'échec d'autorisation au format JSON. Actuellement, il est en train de jeter les 403 page d'erreur au lieu de JSON.
Contrôleur: TenantController.php
class TenantController extends Controller
{
public function show($id)
{
$tenant = Tenant::find($id);
if($tenant == null) return response()->json(['error' => "Invalid tenant ID."],400);
$this->authorize('show',$tenant);
return $tenant;
}
}
Politique: TenantPolicy.php
class TenantPolicy
{
use HandlesAuthorization;
public function show(User $user, Tenant $tenant)
{
$users = $tenant->users();
return $tenant->users->contains($user->id);
}
}
L'autorisation est actuellement en train de travailler très bien, mais c'est en montrant un 403 forbidden page au lieu de renvoyer du json en erreur. Est-il possible de la remettre en JSON pour la 403? Et, est-il possible de faire à l'échelle mondiale pour tous échoué autorisations (et pas seulement dans ce contrôleur)?
Je voudrais utiliser une 3ème partie de la bibliothèque comme dingo/api. Il a traité ce pour vous, ainsi que la gestion des versions et des transformateurs. github.com/dingo/api
OriginalL'auteur Heru S | 2016-07-26
Vous devez vous connecter pour publier un commentaire.
Nous avons réussi à résoudre ce problème en modifiant le gestionnaire d'exceptions trouvé dans
App\Exceptions\Handler.php
de l'ajouter dans lerender
fonction.dd($e instaceof AuthorizationException)
retourne la valeur false.Il fonctionne toujours. Est votre exception vraiment une instance de AuthorizationException? Peut-être que vous avez oublié d'importer les AuthorizationException classe à l'aide de l ' "utilisation" de l'opérateur?
OriginalL'auteur Heru S
Oui, faire un simple avant de méthode dans votre politique qui sera exécuté avant tous les autres contrôles d'autorisation,
TenantPolicy.php
, il aura un peu de fonctions dans y tels queupdate
etstore
et il aura différentes instructions conditionnelles. Que dois-je mettre dans leyourconditiontrue
alors?quel que soit votre logique d'autorisation de retour de true false, si ses oui, alors vous avez à faire, les conditions respectivement sur chacune des fonctions , permettez-moi de rafraîchir mes connaissances sur Laravel de la Politique et de revenir avec une solution de soirée,
OriginalL'auteur Akram Wahid
Vous pouvez intercepter l'exception
OriginalL'auteur 120DEV