2014-06-13 162 views
0

我正在用cakephp 2.4.7進行開發,我很困惑,我不知道實現我需要的最佳方式是什麼。cakephp rest api和身份驗證

我的蛋糕項目與社交網絡類似,我已經編寫了Web部分的大部分。現在我想開始開發原生移動應用程序(iOS,Android等)的API。

在我的項目中,我使用標準formauthentication作爲正常的瀏覽器方式。

我怎樣才能同時使用basicformauthentication?表單身份驗證用於瀏覽器使用和本地移動應用程序的基本身份驗證。

我AppController的樣子:

public $components = array(
    '...', 
    'Auth' => array(
     'loginRedirect' => array(
      'controller' => 'users', 
      'action' => 'index' 
     ), 
     'logoutRedirect' => array(
      'controller' => 'users', 
      'action' => 'login' 
     ), 
     'authError' => 'You must be loggedin to view this page.', 
     'loginError' => 'Invalid user credentials.', 
     'authorize' => array('Controller'), 
     'authenticate' => array(
      'Form' => array(
       'userModel' => 'User', 
      ) 
     ), 
     'authorize' => array(
      'Actions' => array('actionPath' => 'controllers') 
     ) 
    ) 
); 

我知道文檔的這一部分:

利用多個處理程序允許您以支持在登錄用戶的不同的方式當,驗證登錄用戶處理程序按照它們聲明的順序進行檢查

但是login操作怎麼樣?

有沒有更好的解決方案?例如使用令牌進行身份驗證。

我搜索了很多關於API versioningprefix routing。我發現的唯一的事情是,蛋糕2.x不支持前綴路由休息。

我的目標是具有以下結構:

  • /users/view/2的web瀏覽器
  • /api/1.0/users/view/2.json的移動應用程序。

在UsersController:

public function view($id = null) { 
// Webbrowser 
} 

public function api_1_0_view($id = null) { 
// mobile app version 1.0 
} 

public function api_2_0_view($id = null) { 
// mobile app version 2.0 
} 

你能不能給我一個想法,我怎麼能解決問題呢?

回答

2

Basic是無狀態身份驗證,不需要登錄操作。憑據將在每個請求上傳遞並進行檢查。您可以閱讀here瞭解更多信息。

儘管您可以配置AuthComponent以使用多個身份驗證程序,但最好不要一起使用無狀態身份驗證提供程序。在您的AppController的beforeFilter()中,您應該檢查url(因爲所有來自移動設備的url都有「api」前綴,因此應該很容易),並有選擇地使用FormBasic身份驗證提供程序。