J'utilise AuthBasic pour l'authentification API dans un projet Laravel, J'ai ce problème: lorsque l'authentification de la demande d'API n'est pas valide au lieu d'afficher la réponse JSON, elle renvoie le modèle de vue de lame par défaut 401.
Voici le code:
app \ Http \ Middleware \ AuthBasic.php
public function handle($request, Closure $next) { if (Auth::onceBasic()) { return response()->json(["message", "Authentication Required!"], 401); } else { return $next($request); } }
4 Réponses :
Supprimez le 401 ou changez-le en 200 de cette ligne:
return response()->json(["message", "Authentication Required!"], 401);
Voir la référence, le deuxième paramètre définit le code http à envoyer au navigateur. [401] dans votre cas. https://laravel.com/api/5.7/Illuminate/Routing/ ResponseFactory.html # method_json
Je l'ai changé et j'obtiens toujours la même chose, je pense que lorsque la demande d'API n'a pas d'authentification ou une authentification invalide ailleurs, elle redirige vers le fichier de vue 401. Ex: quand j'essaye le contraire, cela me donne la réponse json: if (! Auth :: onceBasic ()) {return response () -> json (["message", "Authentication Required!"], 401); }
Cela résoudra probablement votre problème!
public function handle($request, Closure $next) { $result = Auth::onceBasic(); if($result === 401) return response()->json(["message", "Authentication Required!"]); else return $next($request); }
Non, mon frère: (Merci quand même pour votre aide :)
L'erreur a-t-elle changé ou vous obtenez toujours la même erreur !?
Voici donc une demi-solution à ce problème:
vendor \ laravel \ framework \ src \ Illuminate \ Auth \ SessionGuard.php
public function onceBasic($field = 'email', $extraConditions = []) { $credentials = $this->basicCredentials($this->getRequest(), $field); if (! $this->once(array_merge($credentials, $extraConditions))) { //return $this->failedBasicResponse(); return response()->json(["Message" => "Authentication Required!"], 401); } }
Donc, au lieu de renvoyer la réponse de base échouée, il renverra le message JSON, mais je ne Je ne veux pas faire de changements dans Laravel Core Files, car en cas de mise à jour, ils seront perdus!
Alors, une idée?
Vous avez trouvé la solution:
app \ Exceptions \ Handler.php
public function render($request, Exception $exception) { if ($request->is('api/*') || $request->wantsJson()) { $json = [ 'success' => false, 'error' => [ 'code' => $exception->getCode(), 'message' => $exception->getMessage(), ], ]; return response()->json($json, 401); } return parent::render($request, $exception); }