Skip to content

sswm1975/upost_test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестове завдання по API. Проста система авторизації

Загальні вимоги

  • Безпечність. Дані для авторизації передаються в headers з допомогою authorization basic .
  • Роутинг. Відобразити назву методу в url. Наприклад:
  • https://api/login для авторизації
  • https://api/register для реєстрації
  • Систематизованість. Всі запити мають мати схожу структуру, містити статус відповіді, масив помилок, масив результатів виконання. Всі змінні повинні використовувати _ замість -. Всі назви змінних мають бути англійською мовою, в нижньому регістрі, зрозумілі і без зайвих скорочень. Наприклад result замість res.
  • JSON. Масив повинен повертати валідний json.
  • Mobile friendly API. Відсутність будь-яких null результатів в видачі, відсутність будь-яких cookie і session змінних в роботі api
  • Класи, об’єкти, додаткові бібліотеки і тд розбити на окремі файлі і папки. Важлива ієрархія каталогів.
  • Реалізувати окремий конфіг файл (захищений від прямого відкриття) в якому буде підключатись база даних, будуть зберігатись якісь статичні змінні і константи.

Завдання

Авторизація

Метод передачі даних - POST Логін передавати в незашифрованому виді. Пароль передавати в подвійному md5 шифруванні md5(md5($password) Дані для авторизації передаються в headers з допомогою authorization basic . Для входу користувач використовує логін (номер телефону або емейл), і пароль. Так як логіном може бути або телефон або емейл, в апі передбачити пошук по логіну. Типу

SELECT * FROM users WHERE user_phone=$phone OR user_emai=$email AND password=$password

При успішній авторизації в результаті треба вивести код статусу виконання.

{
    "status": "200"
}

Наприклад при успіху - 200, при помилці 404, або інший відповідний код. Помилки вивести масивом, якщо їх декілька, або простою змінною якщо помилка одна. Назва помилки повинна бути одним словом, без пробілів, і містити в собі значення помилки. Наприклад якщо невірний пароль то password_wrong, або auth_fail і тд...

{
    "status": "404",
    "errors": "password_wrong"
}

Якщо помилки відсутні, то не виводити масив помилок і ні в якому разі не повертати в масиві null

Тестові дані для входу:

email: test_email@gmail.com
phone: +380680091000
password: qwer

Таблиця users

Приймаються коментарі по структурі бази даних


Решение

Созданные файлы и их описание

Файл Описание
app/User.php модель "Пользователи"
app/Http/Middleware/BasicAuthenticate.php посредник для авторизации auth.basic
app/Http/Kernel.php регистрация посредника auth.basic
app/Http/Controllers/API/Auth/RegisterController.php контроллер для регистрации нового пользователя
config/user.php дефолтные настройки для нового пользователя
routes/api.php API POST-роуты login и register

Файлы для тестирования

Файл Описание
app/Libs/helpers.php набор хелпер-функций, в частности функция test_api для тестирования авторизации и регистрации пользователя
app/Providers/AppServiceProvider.php регистрация хелпера
routes/web.php веб-роуты test/login и test/register для тестирования API

Тестирорование

Авторизация

Отправляем POST-запрос на api/login существующий логин:пароль test_email@gmail.com:4e40beaf133b47b8b0020881b20ad713 Ответ

{
    "status": 200,
    "message": "successfully_logged_in"
}

Отправляем POST-запрос на api/login не существующий логин:пароль test@gmail.com:45454 Ответ

{
    "status": 404,
    "errors": "auth_fail"
}

Отправляем POST-запрос на api/login без логина и пароля Ответ

{
    "status": 404,
    "errors": {
        "login":["login_is_empty"],
        "password":["password_is_empty"]
    }
}

Регистрация

Отправляем POST-запрос на api/register c данными:

{
    "user_phone": "+380680091088",
    "user_email": "test_email5@gmail.com",
    "user_password": "qwerty"
}

Ответ

{
    "status": 200,
    "message": "successfully_registered"
}

Повторно отправляем POST-запрос на api/register c такими же данными, получаем ответ:

{
    "status": 404,
    "errors": {
        "user_phone":["already_used"],
        "user_email":["already_used"]
    }
}

Отправляем POST-запрос на api/register c данными:

{
    "user_email": "test_email",
    "user_password": "qwer"
}

Ответ

{
    "status": 404,
    "errors": {
        "user_phone":["required_field"],
        "user_email":["not_valid"],
        "user_password":["too_short"]
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •