2014-03-12 70 views
2

我一直打算通過這個tutorialLaravel AUTH AJAX沒有彈出

一切工作從終端捲曲請求不錯,但我得到一個彈出身份驗證使用jQuery的時候。有沒有辦法來阻止這個彈出窗口並將登錄憑據從jQuery傳遞到API? - 用戶如何從終端工作,以及如何從jQuery「模擬」這一點?

終端:

$ curl --user username:password http://localhost/api/v1/email 
{"error":false,"authEmail":"[email protected]","message":"request success"} 

Laravel控制器的方法:

public function index() { 
    return Response::json(array(
     'error' => false, 
     'authEmail' => Auth::user()->email, 
     'message' => 'request success'), 200); 
} 

Laravel濾波器:

Route::filter('auth.basic', function() { 
return Auth::basic('username'); 
}); 

Laravel路線:

Route::group(array('prefix' => 'api/v1', 'before' => 'auth.basic'), function() { 
Route::resource('email', 'EmailController'); 
}); 

jQuery的:

(function($) { 
$(document).ready(function() { 
    $.ajax({ 
     url: 'http://localhost/api/v1/email', 
     type: 'GET', 
     dataType: 'json', 
     data: { 
      username: 'username', 
      password: 'password' 
     } 
    }).complete(function(data) { 
     console.log(data.responseJSON); 
    }); 
}); 
})(jQuery); 

回答

1

可以使用beforeSend回調添加認證信息:

(function($) { 

    $(document).ready(function() { 

     ajax({ 

      url: 'http://localhost/api/v1/email', 

      type: 'GET', 

      dataType: 'json', 

      beforeSend: function(xhr) { xhr.setRequestHeader(

       "Authorization",  

       "Basic " + btoa('username' + ":" + 'password')); } 

      }) 

      .complete(function(data) {console.log(data.responseJSON)}) 

    }); 

})(jQuery); 
+0

很酷的這個作品完美。那麼這是如何爲其他API做的呢?只是設置標題的問題?那麼我認爲這同樣適用於PHP呢? – VaughanFGX

+0

使用基本認證時需要設置標題。普通身份驗證使用POST數據或任何您已設置使用的數據,但HTTP基本身份驗證是HTTP標準的一部分,需要正確的標頭。 – ollieread

-2

您可以將用戶名和密碼設置添加到您的jQuery Ajax請求:

$.ajax({ 
     url: 'http://localhost/api/v1/email', 
     type: 'GET', 
     dataType: 'json', 
     username: 'username', 
     password: 'password' 
    }).complete(function(data) { 
     console.log(data.responseJSON); 
}); 

我認爲應該工作。

+0

這似乎是工作作爲即時通訊現在得到一個有效的JSON響應,但即時通訊也看到控制檯錯誤:「NetworkError:401未授權 - HTTP ://用戶名:密碼@本地/ API/V1 /電子郵件」。任何想法這個錯誤是關於考慮身份驗證工作? – VaughanFGX