我已经为CakePHP应用程序构建了一个简单的测试API,它将允许用户从移动设备(或任何设备)登录并获得JSON响应。此API可用于PhoneGap中构建的移动应用程序。使用Sessions和令牌进行API身份验证
的登录方法看起来像这样:
public function login()
{
if($this->request->is('post'))
{
// Use custom method in Model to find record with password params
$findUser = $this->User->findUser(
$_POST['username_or_email'],
AuthComponent::password($_POST['password'])
);
// If a user exists and matches params
if($findUser)
{
$this->User->id = $findUser['User']['id'];
$this->autoRender = false;
$this->response->type('json');
$this->response->body(json_encode(array('authenticated'=>true,'message'=>__('You have been logged in successfully'))));
}
else
{
$this->autoRender = false;
$this->response->type('json');
$this->response->body(json_encode(array('authenticated'=>false,'message'=>__('Username or password is incorrect'))));
}
}
else
{
$this->autoRender = false;
$this->response->type('json');
$this->response->body(json_encode(array('message'=>'GET request not allowed!')));
}
}
的移动设备(或API的用户)可以发送自己的登录信息,然后他们得到的JSON请求为真或假的认证。 这个布尔值不是用来给用户的访问权限,而是告诉移动应用程序他们是否可以看到某些屏幕,并且他们只有获得数据或者如果会话存在就可以发送数据!
就像刚才陈述的那样,它们实际上也是在设备上登录到API本身,所以如果他们直接访问网站(来自该设备),他们将会有一个会话并看到相同的JSON响应。
因此,基本上用户在与服务器通信的设备上的会话持续时间内保持登录状态。这与需要为每个请求传递的令牌不同,因为在此示例中它们具有会话。
现在的问题...
是它的做法对于用户是坏“实际上”登录到API 与会话如上所示?它似乎是处理设备身份验证的最安全方式,因为它使用与直接Web根相同的逻辑。
我已经看到了一些API使用的访问令牌,而不是这我也 实现(用户得到他们的令牌,而不是返回布尔 并没有创建会话)。但从我可以告诉,这似乎 喜欢更多的工作,然后我需要检查访问令牌对 用户每次请求时记录。
这是CakePHP的一个很好的REST API插件。也许你可以从https https://github获得一些指针。com/kvz/cakephp-rest-plugin(它使用令牌与Auth组件结合使用) – 2013-02-21 13:10:07
是的,我以前见过,但我一直在寻找自己开发的东西。但他们也使用'$ this-> Auth-> login()',它实际上将用户登录到系统并创建一个会话。 – Cameron 2013-02-21 16:12:19
是的。我正在使用它,但是覆盖了beforeFilter中的一些功能,以不同的方式使用不同的令牌进行授权,同时仍然保留了插件和CakePHP给我的一些automagick。 – 2013-02-21 18:32:28