2014-11-04 125 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}] 

我設法解決它自己這個樣子。