我在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>
答案 0 :(得分:1)
您使用的是PHP FastCGI吗?
来自官方的Laravel文档:
https://laravel.com/docs/5.3/authentication#http-basic-authentication
如果您使用的是PHP FastCGI,则HTTP Basic身份验证可能无法正常使用。应将以下行添加到.htaccess文件中:
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
我设法以这种方式自己解决。