Давайте начнем…
Сначала установите 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