Laravel HTTP基本身份验证不起作用


Laravel HTTP basic authentication not working

我正在Laravel中构建一个API,并尝试使用HTTP基本身份验证。我已经创建了一个电子邮件/密码组合为user@gmail.com:testpass的用户。我正在访问以下URL上的一个端点,该端点需要身份验证:https://user@gmail.com:testpass@myapp.local/users/2

当我将auth.basic路由过滤器附加到该路由时,我可以通过Auth类成功地验证和访问已验证用户的详细信息,但由于这是一个API,我希望使用无状态HTTP基本验证,因此我编写了自己的过滤器:

// Our own auth filter to use onceBasic and return a consistent API response
Route::filter('basic.once', function() {
    $result = Auth::onceBasic();
    if ($result->getStatusCode() === 401) {
        // Unauthorized, return our own response
        return Response::json([
            'message' => 'Bad credentials'
        ], Config::get('status.error.unauthorized'));
    }
    return $result;
});

不管怎样,这里Auth::onceBasic()的结果总是未经授权地返回,即使我发送的用户名/密码组合保持不变。即使我在过滤器中将Auth::onceBasic()更改为Auth::basic(),它仍然会返回未经授权的结果。

我甚至不知道从哪里开始调试,因为我的过滤器基本上与Laravel附带的auth.basic过滤器相同,只是使用了更多的代码来产生一致的API输出。

您使用的是PHP FastCGI吗?

来自Laravel官方文档:


https://laravel.com/docs/5.3/authentication#http-基本身份验证

关于FastCGI的一点注记

如果您使用的是PHP FastCGI,HTTP Basic身份验证可能无法正常运行。以下几行应该添加到.htaccess文件中:

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

我用这种方法自己解决了。