#php #api #cakephp #authentication #restful-authentication
#php #API #cakephp #аутентификация #restful-аутентификация
Вопрос:
я разрабатываю с помощью cakephp 2.4.7, и я очень смущен, и я не знаю, какой лучший способ реализовать то, что мне нужно.
Мой проект cake похож на социальную сеть, и я уже запрограммировал большую часть веб-части. Теперь я хочу начать разработку API для собственных мобильных приложений (iOS, Android и т.д.).
В моем проекте я использую стандарт form
authentication
для обычного веб-браузера.
Как я могу использовать оба, basic
и form
authentication
? Аутентификация в форме для веб-браузера и базовая аутентификация для собственных приложений mobiel.
Мой 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
. Единственное, что я обнаружил, это то, что cake 2.x не поддерживает префиксную маршрутизацию для rest.
Моя цель — иметь следующую структуру:
/users/view/2
для веб-браузера/api/1.0/users/view/2.json
для мобильных приложений.
В UsersController:
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
}
Можете ли вы дать мне представление о том, как я могу решить проблемы?
Ответ №1:
Basic
является аутентификацией без состояния и не требует действия входа в систему. Учетные данные передаются и проверяются при каждом запросе. Вы можете прочитать здесь для получения дополнительной информации.
Хотя вы можете настроить AuthComponent для использования нескольких аутентификаторов, лучше не использовать провайдера аутентификации без состояния и проверки состояния вместе. В beforeFilter() вашего AppController в вашем AppController вы должны проверить URL-адрес (в вашем случае это должно быть легко, поскольку все URL-адреса с мобильных устройств имеют префикс «api») и выборочно использовать либо Form
или Basic
поставщика аутентификации.