Право,
Это сложная тема, но в его простейшей форме вам нужен маршрут для входа, который возвращает ключ API для вашего клиента, как так ....
Примечание это очень простой код, Я использую в целях тестирования, он не хватает правильного хеширования паролей и проверки срока действия токена доступа плюс справедливый бит другой безопасности. Это просто проиллюстрировать простой пример.
app->get('/login/:username/:password', function ($username, $password) use ($app, $db) {
//check the login details against the db...
// TODO Include hashing FIX BEFORE PRODUCTION
$db->where("userName", $username);
$db->where("password", $password);
$result = $db->getOne('Users');
if ($db->count === 0) {
setResponseCode(401, array("Error" => "Incorrect login details."));
return;
}
// The way this key is generated needs updating, only for testing purposes.
$key = date("Y-m-d");
$key = $key . $username;
$key = md5($key);
// Need to add expiry time to access tokens....
$expire = date("Y-m-d H:i:s", strtotime('+15 minutes'));
$data = Array ('accessToken' => $key);
$db->where('id', $result['id']);
if (!$db->update('Users', $data)) {
// Internal error - this shouldn't happen!
setResponseCode(500, array("Error" => "Database error."));
return;
}
// Slim by default returns 200 so no need to call setResponseCode
echo json_encode(array("Authorisation" => $key));
});
function setResponseCode($code, $arrayJson) {
global $app;
/*
Function to save repetition of response headers - params are:
Int Code - HTTP Response Code
Array array_json - an array to be serialized into a JSON response ie array("Key" => "Item")
*/
$app->response->setStatus($code);
$app->response->SetBody(json_encode($arrayJson));
$app->response->headers->set('Content-Type', 'application/json');
}
function authorise($key) {
// Middleware for routes that require auth!
//global $key;
global $userId;
global $app;
global $db;
// need to add check for token expiry here!
$db->where('accessToken', $key);
$results = $db->getOne('Users', null, array('id'));
if ($db->count === 0) {
setResponseCode(401, array("Error" => "Authorisation Failure"));
$app->stop();
//return false;
}
$userId = $results['id'];
return true;
}
Ваш клиент должен хранить ключ и добавить его к параметрам в любой запрос вы можете использовать заголовки или только простые параметры. Опять же, я использовал google slim, API, токен доступа, учебник как термины, потому что это очень простой ответ на сложный вопрос.
Теперь вы просто добавляете авторизацию ($ key) к вершине любых маршрутов, которые в ней нуждаются, если она ложна, она вернет 401 и прекратит дальнейшее выполнение. Я бы рекомендовал сделать еще немного чтения, хотя это очень, очень простой ответ.
для стартеров ... не привязывают функцию, которая выводит все ваши пользовательские данные, не выполняя никаких авторизаций или аутентификации на маршруте. – Orangepill
@Orangepill Спасибо, есть ли какой-нибудь ресурс, который я мог бы узнать об этом? – praHoc
Держись, я уже делал этот ответ ... –