我正在使用cakephp 2.4.7开发,我很困惑,我不知道什么是实现我需要的最好方法。
我的蛋糕项目类似于一个社交网络,我已经编程了web部分的很大一部分。现在我想开始为本地移动应用程序(iOS, Android等)开发API。
在我的项目中,我使用标准的form
authentication
为正常的浏览器方式。
如何同时使用basic
和form
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 versioning
和prefix routing
。我唯一找到的东西就是那个蛋糕。X不支持rest的前缀路由。
我的目标是有以下结构:
-
/users/view/2
for webbrowser - 移动应用
/api/1.0/users/view/2.json
。
:
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"前缀),并有选择地使用Form
或Basic
认证提供商。