2014-11-04 126 views
0

我在Laravel中构建了一个API,并试图使用HTTP基本身份验证。我创建了一个电子邮件/密码组合为[email protected]:testpass的用户。我在下面的网址需要身份验证访问端点:https://[email protected]:[email protected]/users/2Laravel HTTP基本身份验证不起作用

当我附上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输出。

+0

你可以发布你的用户模型吗?另外,你的密码在分贝哈希? – lukasgeiter 2014-11-04 20:55:17

+0

你解决了吗?您是否尝试更改.httaccess? – chemitaxis 2014-11-24 18:33:36

回答

1

您使用的是PHP FastCGI吗?

从官方Laravel文档:


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

一个注FastCGI的

如果您使用的是PHP的FastCGI,HTTP基本身份验证可能无法正常工作开箱。以下各行应添加到您的.htaccess文件:

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

我设法解决它自己这个样子。