1
votes

Renvoyer la réponse JSON au lieu du fichier lame 401

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);
    }
}


0 commentaires

4 Réponses :


0
votes

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


1 commentaires

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); }



0
votes

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);
}


2 commentaires

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 !?



0
votes

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?


0 commentaires

1
votes

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);
}


0 commentaires