cakephp rest api и аутентификация

#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 поставщика аутентификации.