cakephp rest api and authentication


cakephp rest api and authentication

我正在使用cakephp 2.4.7开发,我很困惑,我不知道什么是实现我需要的最好方法。

我的蛋糕项目类似于一个社交网络,我已经编程了web部分的很大一部分。现在我想开始为本地移动应用程序(iOS, Android等)开发API。

在我的项目中,我使用标准的form authentication为正常的浏览器方式。

如何同时使用basicform authentication ?web浏览器使用的表单认证和原生移动应用的基本认证。

我的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。我唯一找到的东西就是那个蛋糕。X不支持rest的前缀路由。

我的目标是有以下结构:

  • /users/view/2 for webbrowser
  • 移动应用/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
}
你能告诉我如何解决这些问题吗?

Basic是无状态身份验证,不需要登录操作。对每个请求传递并检查凭据。你可以在这里阅读更多信息。

虽然你可以配置AuthComponent来使用多个认证器,但是最好不要同时使用无状态和有状态的认证提供者。在你的AppController的beforeFilter()中,你应该检查url(在你的情况下应该很容易,因为所有来自手机的url都有"api"前缀),并有选择地使用FormBasic认证提供商。