Давайте начнем…

Сначала установите Adonisjs cli

npm i -g @adonisjs/cli

Если вы получили сообщение об ошибке отказано в доступе, запустите npm i с разрешениями sudo.

sudo npm i -g @adonisjs/cli

После завершения установки выполните команду ниже

adonis new secure-api --api-only

Вы видите флаг только API? Что ж, это указывает на то, что Adonis следует клонировать шаблонный код со структурой API, а не приложение с полным стеком.

Запустите свой сервер с помощью

adonis serve --dev

Зайдите в браузер и откройте http://127.0.0.1:3333

Сервер запущен и работает с нашим первым маршрутом /

Пришло время начать кодить, для этого откройте папку с вашей IDE (я использую VS Code) и вы увидите структуру проекта

Откройте файл .env и отредактируйте его, указав нужную информацию.

HOST=127.0.0.1
PORT=3333  #server's port
NODE_ENV=development #if you set it to production, debug errors will be turned off
APP_NAME=RestAPI #your application's name
APP_URL=http://${HOST}:${PORT}
CACHE_VIEWS=false
APP_KEY=mulhgTjgI0xDvpsDWLXMJfJYCzn30B5F
DB_CONNECTION=pg
##database
DB_HOST=*****.alexcasarrubias.com.mx
DB_PORT=5432
DB_USER=myusername
DB_PASSWORD=mypassword123!.
DB_DATABASE=adonis
## end - database section
HASH_DRIVER=bcrypt

Начнем с нашей аутентификации

Если вы создали проект с помощью — только API — модуль авторизации будет установлен автоматически, если нет, выполните команду ниже

adonis install @adonisjs/auth

Чтобы сообщить нашему приложению, что он будет использовать метод аутентификации, мы должны добавить к нашим провайдерам в файле start/app.js ниже зависимость:

  '@adonisjs/auth/providers/AuthProvider'

Раздел провайдеров должен выглядеть так:

const providers = [
"@adonisjs/framework/providers/AppProvider",
"@adonisjs/auth/providers/AuthProvider",
"@adonisjs/bodyparser/providers/BodyParserProvider",
"@adonisjs/cors/providers/CorsProvider",
"@adonisjs/lucid/providers/LucidProvider",
"@adonisjs/auth/providers/AuthProvider",
];

Теперь откройте файл start/kernel.js и добавьте приведенные ниже зависимости в разделы globalMiddelware и namedMiddleware.

globalMiddleware =>  'Adonis/Middleware/AuthInit'

namedMiddleware =>  auth: 'Adonis/Middleware/Auth'

Разделы должны выглядеть так

const globalMiddleware = [
"Adonis/Middleware/BodyParser",
"App/Middleware/ConvertEmptyStringsToNull",
"Adonis/Middleware/AuthInit",
];

const namedMiddleware = {
auth: "Adonis/Middleware/Auth",
guest: "Adonis/Middleware/AllowGuestOnly",
};

Конфигурация

Откройте config/auth.js и убедитесь, что jwt установлен в качестве аутентификатора.

Откройте терминал, перейдите в папку вашего проекта и создайте

adonis make:controller UserController

Установите контроллер для HTTP-запроса.

Откройте app/controllers/Http/UserController и создайте два метода:

  • авторизоваться
  • показать пользователя

Добавьте приведенный ниже код в наши методы.

async login({ request, auth }) {
const { email, password } = request.all();
await auth.attempt(email, password);
return "Hell yeah!";
}
show({ auth, params }) {
if (auth.user.id !== Number(params.id)) {
return "Unauthorized: Not your profile";
}
return auth.user;
}

Откройте файлы start/routes.js и добавьте маршрут входа в конец файла.

Route.post('login', 'UserController.login')

Если ваш сервер не запущен, запустите его

adonis serve --dev

В браузере перейдите по адресу: http://127.0.0.1:3333/login

http://127.0.0.1:3333/loginЭта ошибка отображается, потому что наш маршрут является методом POST

Route.post('login', 'UserController.login')

Я использую почтальон для проверки своих конечных точек, я создаю новый запрос с помощью метода POST и http://127.0.0.1:3333/login нажмите SEND

UPS! это не удается!

Посмотрим описание ошибки

Хммм… запустить $ npm install pg — сохранить Не удается найти модуль ‘pg’

Спасибо! Мне нужно запустить команду npm install pg — save

Выполнять

adonis migration:run

Перезагрузите сервер и повторите попытку.

Хорошо, теперь… как я могу проверить, работает ли вход в систему?

давайте добавим регистрацию одного пользователя(только для целей тестирования)

Добавить маршрут регистрации как POST

Route.post(“register”, “UserController.register”);

Добавить логику регистрации пользователя

async register({ request, auth }) {
const { email, username, password } = request.all();
const User = use("App/Models/User");
const user = new User();
user.username = username;
user.email = email;
user.password = password;
await user.save();
return user;
}

Создайте запрос на регистрацию в почтальоне и выполните его

Я добавил ниже тело json к запросу

{
"username":"myuser",
"email":"[email protected]",
"password":"test1234"
}

Откройте запрос на вход в postmand и отправьте ниже json для тела запроса.

{
"email":"[email protected]",
"password":"test1234"
}

Он работает!

Еще один шаг для возврата токена JWT, и наш сервер готов к работе!

Откройте файл UserController.js и установите логику входа, как показано ниже:

async login({ request, auth }) {
const { email, password } = request.all();
return await auth.attempt(email, password);
}

Выполните снова запрос на вход, и ответ должен выглядеть следующим образом:

{
“type”: “bearer”,
“token”: “eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjMsImlhdCI6MTYwOTU1MzM0OX0.LjQRh6Rk0oJWaCUUYde91YoesKMgTO3v10TUsimAz3Y”,
“refreshToken”: null
}

Часть 2. Добавление проверок и настраиваемых исключений

Часть 3. Развертывание в ElasticBeanstalk

Репозиторий Git-хаба

Купи мне текилу