返回JSON响应而不是401 Blade文件

时间:2019-02-26 23:11:32

标签: php api authentication laravel-5

我在Laravel项目中使用AuthBasic进行API身份验证, 我有这个问题:当API请求身份验证无效而不是显示JSON响应时,它将返回401默认刀片视图模板。

代码如下:

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 个答案:

答案 0 :(得分:0)

从此行中删除401或将其更改为200:

(keyup.enter)="$event.preventDefault();"

请参阅参考资料,第二个参数是定义发送浏览器的http代码。 [401]在您的情况下。 https://laravel.com/api/5.7/Illuminate/Routing/ResponseFactory.html#method_json

答案 1 :(得分:0)

这可能会解决您的问题!

public function handle($request, Closure $next)
{   
    $result = Auth::onceBasic();

    if($result === 401)
        return response()->json(["message", "Authentication Required!"]);
    else
        return $next($request);
}

答案 2 :(得分:0)

因此,这是该问题的一半解决方案:

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

因此,它不会返回“失败的基本响应”,而是会返回JSON消息,但是我不想在Laravel Core Files中进行更改,因为在更新的情况下,它们将丢失!

那么有什么主意吗?

答案 3 :(得分:0)

找到了解决方案:

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