Обычно схема этого API такая:
- Пользователь вводит в приложении логин и пароль
- Приложение делает запрос к сайту, передавая эти данные
- Сайт проверяет, действительно ли есть пользователь с таким логином и правильно ли указан пароль
- Если всё ок — сайт выдаёт в ответ токен
- Приложение сохраняет этот токен у себя (на телефоне пользователя)
- И при любых обращениях к сайту использует этот токен
- Сайт получает токен и выдаёт контент, который доступен именно для этого пользователя
На первый взгляд довольно сложная схема, но вот как можно реализовать её, используя дополнение HandlerAPI.
Создаём «секцию», в контенте которой вызываем сниппет AuthApiToken
И в сниппете пишем логику, которая будет проверять токен или авторизовывать пользователя:
<?php $output = [ 'success' => false ]; if ($_REQUEST['token']) { if ($user = $modx->getObject('modUser', ['password' => $_REQUEST['token']])) { $output['username'] = $user->username; $output['success'] = true; } else { $output['message'] = 'Wrong token'; } } else { $response = $modx->runProcessor('security/login', $_REQUEST); if ($response->response['success']) { $user = $modx->getObject('modUser', ['username' => $_REQUEST['username']]); $output['username'] = $user->username; $output['token'] = $user->password; $output['success'] = true; } if ($response->isError()) { $output['message'] = $response->getMessage(); } } return $modx->toJSON($output);
В такой схеме при неправильном пароле пользователь увидит стандартное сообщение об ошибке — точно такое же, как и в случае неправильного пароля на самом сайте.
0 комментариев