Дізнайтеся, як обробляти автентифікацію за допомогою Node за допомогою Passport.js

Підтримайте мене, прочитавши його з його першоджерела: ОРИГІНАЛЬНИЙ ДЖЕРЕЛО

У цій статті ви дізнаєтеся, як обробляти автентифікацію для вашого сервера Node за допомогою Passport.js. Ця стаття не охоплює автентифікацію Frontend. Використовуйте це для налаштування автентифікації Backend (Створіть маркер для кожного користувача та захистіть маршрути).

Майте на увазі, що якщо ви застрягнете на будь-якому кроці, ви можете звернутися до цього репозиторію GitHub .

У цій статті я навчу вас наступному:

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

Вступ

Що таке Passport.js?

Passport - це проміжне програмне забезпечення для автентифікації для Node.js. Оскільки паспорт є надзвичайно гнучким і модульним, його можна ненав’язливо впустити в будь-яку веб-програму на базі Express. Комплексний набір стратегій підтримує автентифікацію за допомогою імені користувача та пароля, Facebook, Twitter тощо. Дізнайтеся більше про паспорт тут.

Підручник

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

Створіть новий каталог за допомогою цього “app.js”файл всередині:

Для легшої розробки ми встановимо nodemon.

і тоді ми будемо запускати наш "app.js" з ним.

$ nodemon app.js

Створення моделі користувача

Створіть нову папку під назвою “моделі”,і створіть файл “Users.js” всередині цієї папки.Тут ми визначимо нашу “Схему користувачів”. Ми збираємось використовувати JWTі Cryptoгенерувати hashі saltз отриманого passwordрядка. Пізніше це буде використано для перевірки користувача.

Давайте додамо нову модель до “app.js”.

Після налаштування додайте наступний рядок у файл "app.js" Mongoose:

require('./models/Users');

Налаштуйте паспорт

Створіть нову папку “config” із файлом “паспорт.js” всередині неї:

У цьому файлі ми використовуємо метод, validatePasswordякий ми визначили вUser model. На підставі результату ми повертаємо різні результати, як у Passport LocalStrategy.

Давайте підключимо файл “visa.js” до нашого файлу “app.js”. Додайте такий рядок нижче всіхmodels :

require('./config/passport');

Маршрути та параметри автентифікації

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

У цьому файлі ми використовуємо функцію getTokenFromHeadersдля отримання маркера JWT, який буде надісланий з боку клієнта в заголовках запиту . Ми також створити authоб'єкт optionalі requiredвластивості. Ми використаємо їх пізніше в наших маршрутах.

У тій же папці „routes” створіть файл „index.js”:

Тепер нам потрібна папка “api” всередині папки “routes”, а в ній - інший файл “index.js”.

Тепер давайте створимо файл “users.js”, який нам потрібен в “api / index.js”.

По-перше, ми збираємося створити додатковий маршрут автентифікації,‘/’ який буде використовуватися для створення нової моделі (реєстру).

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

Після цього ми збираємося створити ще один додатковий маршрут авторизації‘/login’ . Це буде використано для активації конфігурації нашого паспорта та підтвердження отриманого пароля електронною поштою.

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

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

router.get('/current', auth.required, (req, res, next) ...

Давайте додамо нашу папку „routes” до „app.js”.Додайте такий рядок під наш паспортrequire :

app.use(require('./routes'));

Тестування маршруту

Я буду користуватися Поштаремнадсилати запити на наш сервер.

Наш сервер приймає таке тіло:

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

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

Тест:

Відповідь:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c" } }

Тепер ми використаємо цей маркер і додамо його до наших “Заголовків” у конфігурації Листоноші.

And now let’s test our auth only route.

Creating a GET request to return the currently logged in user

Request URL:

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

Response:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }

Let’s try to do it without token in “Headers”.

Response:

The end

Thank you for going through this tutorial. If you notice any errors please report them to me. If you got stuck on any step, please refer to this GitHub repo.

You can contact me through:

  • erdeljac DOT antonio AT gmail.com
  • Linkedin

Check out my app SwipeFeed.