Laravel 5 Basic Auth自定义错误

时间:2016-09-07 00:13:55

标签: php laravel-5 basic-authentication

在Laravel 5中,如果用户的基本身份验证失败,则返回的默认消息是" Invalid Credentials"错误字符串。我正在尝试在发生这种情况时返回自定义JSON错误。

我可以在vendor / laravel / framework / src / Illuminate / Auth / SessionGuard.php中编辑返回的响应 但是我还没有看到你可以在供应商目录之外更改此消息的行为。有办法吗?

通过Laravel 4看起来有一些方法可以做到这一点:Laravel 4 Basic Auth custom error

1 个答案:

答案 0 :(得分:0)

想出来,看起来我必须创建自定义中间件来处理这个问题。 请注意,只有从Postman等工具调用API时,此解决方案才能从浏览器调用API时无效。出于某种原因,当我从浏览器中调用它时,我总是在看到基本的auth提示之前得到错误。

在我的控制器中,我将中间件更改为我新创建的中间件:

$this->middleware('custom');

在内核中我添加了它的位置:

protected $routeMiddleware = [
    'auth.basic.once' =>  \App\Http\Middleware\Custom::class,
]

然后我创建了中间件。我使用了Stateless Basic Auth,因为我正在创建一个API:

<?php
namespace App\Http\Middleware;

use Auth;
use Closure;
use Illuminate\Http\Request as HttpRequest;
use App\Entities\CustomErrorResponse
class Custom
{
    public function __construct(CustomErrorResponse $customErrorResponse) {
        $this->customErrorResponse = $customErrorResponse
    }
     public function handle($request, Closure $next)
     {   
         $response = Auth::onceBasic();

         if (!$response) {
             return $next($request);
         }
         return $this->customErrorResponse->send();
 }

}