2014-06-13 168 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身份验证提供程序。