Узнайте, как обрабатывать аутентификацию с помощью Node с помощью Passport.js

1656600134 uznajte kak obrabatyvat autentifikacziyu s pomoshhyu node s pomoshhyu passportjs

Антонио Эрдельяч

1*OUk_mC8ojHhStMEURjbI8g
Фото Оскара Йилдиза на Unsplash

Поддержите меня, прочитав его из оригинального источника: ИСТОЧНИК

В этой статье вы узнаете, как себя вести аутентификация для вашего сервера Node Passport.js. Эта статья не включает аутентификацию Frontend. Используйте это для настройки Бекенд-аутентификация (Создавайте маркер для каждого пользователя и защитите маршруты).

Имейте в виду если вы застряли на каком-то шаге, можете обратиться к этому репозиторию GitHub.

В этой статье я научу вас следующему:

  • Обработка защищенных маршрутов
  • Обработка токенов JWT
  • Обработка несанкционированных ответов
  • Создание базового API
  • Создание моделей и схем

Введение

Что такое Passport.js?

Passport — это промежуточное программное обеспечение для проверки подлинности для Node.js. Поскольку Passport чрезвычайно гибок и модульен, его можно незаметно вставить в любое веб-приложение на базе Express. Полный набор стратегий поддерживает аутентификацию с помощью имени пользователя и пароля, Facebook, Twitter и т.д. Узнайте больше о паспорте здесь.

Учебник

Создание нашего сервера узлов с нуля

Создайте новый каталог с этим «app.js» файл внутри:

Мы установим nodemon для облегчения разработки.

а затем мы запустим наш app.js вместе с ним.

$ nodemon app.js
1*6kdVzksHWBymrCL20pNyzA
Ожидаемый результат после выполнения вышеприведенной команды

Создание модели пользователя

Создайте новую папку под названием «models», и создайте файл «Users.js» в этой папке. Именно здесь мы определим нашу «схему пользователей». Мы собираемся использовать JWT и Crypto генерировать hash и salt от полученного password строчка. Позже это будет использовано для проверки пользователя.

1*updLloBs1oJyVGplMGG4lQ
Теперь у вас должна быть такая структура

Давайте добавим нашу новую модель к “app.js”.

После настройки добавьте следующую строку в файл app.js Mongoose:

require('./models/Users');
1*YDxu9Xcr1SqDjQLzTVI9MA

Настроить паспорт

Создайте новую папку «config» с файлом «passport.js» внутри:

В этом файле мы используем метод validatePassword которые мы определили в User model . На основе результата мы возвращаем выход, отличный от паспорта LocalStrategy.

1*TxTXHZEmeZoEff1TeW9hDA
Теперь у вас должна быть такая структура

Давайте подключим «passport.js» к нашему файлу «app.js». Добавьте следующую строчку ниже всего models:

require('./config/passport');
1*_Uem3m6YuPSnhx9DZsJ5sA
Требование к паспорту должно быть ниже всех моделей

Маршруты и параметры аутентификации

Создайте новую папку под названием routes с файлом auth.js внутри.

В этом файле мы используем функцию getTokenFromHeaders чтобы получить a Токен JWT который будет послан из сторона клиента в заголовки запроса. Мы также создаем auth объект с optional и required свойства. Мы будем использовать их позже в наших маршрутах.

В той же папке «routes» создайте файл «index.js»:

Теперь нам нужна папка api внутри папки routes с другим файлом index.js внутри нее.

1*xT-bMD4RPNbS0trhqltHQQ
Теперь у вас должна быть такая структура

Теперь давайте создадим файл users.js, который нам нужен в api/index.js.

Сначала мы собираемся создать необязательный автомобиль маршрут ‘/’ который будет использован для создания (реестра) новой модели.

router.post('/', auth.optional, (req, res, next) ...

После этого мы собираемся создать еще один необязательный автомобиль маршрут ‘/login’ . Это будет использовано для активации нашей паспортной конфигурации и подтверждения полученного пароля по электронной почте.

router.post('/login', auth.optional, (req, res, next) ...

Наконец, мы создадим a необходимый авт маршрут, который будет использоваться для возврата входящего в систему пользователя. Доступ к этому маршруту имеют только пользователи, которые вошли в систему (пользователи, успешно отправившие маркер через заголовки запроса).

router.get('/current', auth.required, (req, res, next) ...
1*FhlHO36q_NTY73Qhw2Vfiw
Теперь у вас должна быть такая структура

Давайте добавим нашу папку “routes” к “app.js”. Добавьте следующую строчку ниже нашего паспорта require:

app.use(require('./routes'));
1*B44dNEd8f0Ii5GDkNJ0fLQ

Тестирование маршрута

Я буду использовать Postman чтобы отправить запросы на наш сервер.

Наш сервер принимает следующее тело:

{
  "user": {
    "email": String,
    "password": String
  }
}

Создание запроса POST для создания пользователя

Тестовое тело:

1*e_U1SfVcGty_8XAZ8gWuSQ

Ответ:

{
    "user": {
        "_id": "5b0f38772c46910f16a058c5",
        "email": "erdeljac.antonio@gmail.com",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c"
    }
}

Теперь мы будем использовать этот маркер и добавим его к нашим «Заголовкам» в конфигурации Postman.

1*3TqFAWgy1bULj-ECJRyKKw

А теперь проверим нашу только авт маршрут.

Создание а Запрос GET для возврата пользователя, вошедшего в систему

URL запроса:

GET http://localhost:8000/api/users/current

Ответ:

{
    "user": {
        "_id": "5b0f38772c46910f16a058c5",
        "email": "erdeljac.antonio@gmail.com",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0"
    }
}

Давайте попробуем это сделать без токена в «Заголовках».

Ответ:

1*ggNxOl_DMzg6dklIJAKG3g

бросить

Спасибо, что прошли этот учебник. Если вы заметили какие-то ошибки, пожалуйста, сообщите мне о них. Если вы застряли на каком-то шаге, пожалуйста, обратитесь к этому репозиторию GitHub.

Вы можете связаться со мной по:

  • erdeljac DOT antonio на gmail.com
  • Linkedin

Просмотрите мое приложение SwipeFeed.

Добавить комментарий

Ваш адрес email не будет опубликован.