Laravel HTTP基本身份验证无效

时间:2014-11-04 13:03:51

标签: php authentication laravel laravel-4

我在Laravel中构建API并尝试使用HTTP基本身份验证。我已使用user@gmail.com:testpass的电子邮件/密码组合创建了一个用户。我在以下网址访问端点,需要进行身份验证: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输出。 / p>

1 个答案:

答案 0 :(得分:1)

您使用的是PHP FastCGI吗?

来自官方的Laravel文档:

https://laravel.com/docs/5.3/authentication#http-basic-authentication

关于FastCGI的注释

  

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

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

我设法以这种方式自己解决。