REST API上的CakePHP身份验证

所以我正在为我正在开发的Web应用程序创建一个REST API,我知道身份验证的基本方法是在每个请求上发送凭据或发送令牌.

由于我以前从未使用过令牌,我想我可以为每个请求发送凭据.关键是我找不到任何关于如何在控制器中处理这个问题的例子.它会是这样的吗?

public function api_index() {
    if(!$this->Auth->login()) return;

    $this->set(array(
        'models' => $this->Model->find('all'),'_serialize' => array('models')
    ));
}

我真的不认为这是AuthComponent :: login()的工作方式,我可以在这里得到一些指示吗?

好的,首先澄清一下AuthComponent :: login的工作原理.在Cake 2.x中,该方法不进行任何身份验证,而是在会话中创建Auth.User数组.您需要自己实现实际的身份验证(用户模型是一个自然的地方).基本身份验证方法可能如下所示:
App::uses('AuthComponent','Controller/Component');
public function authenticate($data) {
    $user = $this->find('first',array(
        'conditions' => array('User.login' => $data['login']),));
    if($user['User']['password'] !== AuthComponent::password($data['password']) {
        return false;
    }

    unset($user['User']['password']);  // don't forget this part
    return $user;
    // the reason I return the user is so I can pass it to Authcomponent::login if desired
}

现在,只要加载了用户模型,就可以从任何控制器使用它.您可能知道可以通过调用Controller :: loadModel(‘User’)来加载它.

如果你想验证每个请求,那么你应该放入AppController的beforeFilter方法

public function beforeFilter() {
    $this->loadModel('User');
    if(!$this->User->authenticate($this->request->data)) {
        throw new UnauthorizedException(__('You don\'t belong here.'));
    }
}

以上所有假设您每次都会传递登录名和密码的POST值.我认为令牌认证绝对是更好的方法,但是为了起床和运行,这应该有效.一些缺点包括以明文形式发送密码(除非您需要ssl)每次请求以及散列算法可能的高cpu使用率.不过,我希望这能让您更好地了解如何使用cakePHP进行身份验证.

如果有需要澄清,请告诉我.

更新:
发布之后,我发现你实际上可以使用没有参数的AuthComponent :: login,但我不喜欢这样做.从CakePHP文档:

In 2.x $this->Auth->login($this->request->data) will log the user in with 
 whatever data is posted,whereas in 1.3 $this->Auth->login($this->data) 
 would try to identify the user first and only log in when successful.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...