Хорошо, первое разъяснение о том, как AuthComponent :: Вход работ. В Cake 2.x этот метод не выполняет никакой проверки подлинности, а создает массив Auth.User в вашем сеансе. Вам необходимо реализовать собственно аутентификацию (модель 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')
.
Если вы хотите проверить подлинность каждого запроса, то вы должны затем положить в методе beforeFilter из AppController:
public function beforeFilter() {
$this->loadModel('User');
if(!$this->User->authenticate($this->request->data)) {
throw new UnauthorizedException(__('You don\'t belong here.'));
}
}
Все вышесказанное предполагает, что вы передаете значения POST для входа в систему и пароль каждый раз. Я думаю, что аутентификация маркера, безусловно, лучший способ пойти, но для того, чтобы встать и работать, это должно работать. Некоторые недостатки включают отправку пароля в cleartext (если вам не требуется ssl) каждый запрос и, вероятно, высокий уровень использования алгоритма хеширования каждый раз. Тем не менее, я надеюсь, что это даст вам лучшее представление о том, как сделать аутентификацию с помощью 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.
Благодарим вас за ответ. Мне было интересно узнать, как я могу аутентифицироваться при каждом действии, поскольку мобильное приложение, использующее API, не сможет поддерживать сеанс –