Я пытаюсь создать API для своего приложения CakePHP, используя плагин REST: https://github.com/kvz/cakephp-rest-plugin
Причиной использования этого плагина является то, что я хотел, чтобы простой способ справиться с проверкой подлинности в отношении вызовов API на защищенных методах, а также заниматься протоколированием и т.д. в будущем.
Чтобы предотвратить дублирование, плагин настроен, как описано в предыдущем вопросе: CakePHP REST Plugin не возвращает данные, который теперь исправлен и работает.
Следующая часть обрабатывает аутентификацию. Я добавил следующее к моему методу beforeFilter, который в основном должен сказать, если это вызов для отдыха, и пользователь не вошел в систему (обратите внимание: что не все методы требуют входа пользователя в систему), а затем запишите их.
if (!$this->Auth->user()) {
if ($this->Rest->isActive()) {
$loginUser = $this->User->loginUser(
$credentials['username'],
AuthComponent::password($credentials['password'])
);
if($loginUser) {
if (!$this->Auth->login($loginUser['User'])) {
$msg = sprintf('Unable to log you in with the supplied credentials. ');
return $this->Rest->abort(array('status' => '403', 'error' => $msg));
}
}
}
}
и для тех, кто хочет увидеть вызов модели:
public function loginUser($usernameOrEmail, $password)
{
return $this->find('first', array(
'conditions' => array(
'OR' => array(
'User.email' => $usernameOrEmail,
'User.username' => $usernameOrEmail,
'User.phone' => $usernameOrEmail
),
'User.password' => $password
),
'recursive' => -1
));
}
Однако я не могу заставить его работать. Я делаю запрос, например, для тестирования:
$.ajax({
url: 'http://domain.com/users/test.json',
dataType: 'jsonp',
data: { username: 'test', password: 'test' },
headers: {
Authorization: "TRUEREST"
},
success: function(response) {
console.log(resonse);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR, textStatus, errorThrown);
}
});
Вот три основных вопроса, которые я имею здесь:
-
Я вручную передаю имя пользователя и пароль здесь, но часть заголовков правильная? Объяснение относительно этого довольно расплывчато по документации для этого здесь: https://github.com/kvz/cakephp-rest-plugin#authorization
-
Будет ли
$credentials['username']
собирать его? Является ли $credentials глобальной вещью с проверкой подлинности HTTP или я что-то пропустил? -
Собираетесь ли вы регистрировать пользователя каждый раз, когда они делают запрос? Как это кажется немного грязным, если это дело.
Текущие ошибки реализации кода с помощью: Uncaught SyntaxError: Unexpected token :
и вот вывод JSON, который отлично выглядит для меня...
{
"data": {
"User": []
},
"meta": {
"status": "error",
"feedback": [{
"message": "Log in to continue",
"level": "error"
}],
"request": {
"http_host": "domain.com",
"http_user_agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.29 Safari\/537.22",
"server_addr": "##.##.###.###",
"remote_addr": "##.###.###.###",
"server_protocol": "HTTP\/1.1",
"request_method": "GET",
"request_uri": "\/users\/test.json?callback=jQuery172015279368730261922_1358207116601&username=test&password=test123&_=1358207116611",
"request_time": 1358207116
},
"credentials": {
"class": null,
"apikey": null,
"username": null
},
"time_epoch": "1358207117",
"time_local": "Mon, 14 Jan 2013 15:45:17 -0800",
"version": "0.3"
}
}