Обычно схема этого 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 комментариев