Большое вступление

Аутентификация и авторизация — одна из основных частей любой серверной системы, от малого бизнеса до крупной компании.

Из этой подробной серии вы узнаете, как работать с обоими в приложении Node.js.

Стек

Как уже упоминалось в заголовке, мы будем использовать Node.js, но что такое Node.js?

Node.js — это: кроссплатформенная внутренняя среда выполнения JavaScript с открытым исходным кодом, работающая на движке V8 и выполняющая код JavaScript вне веб-браузера.

Итак, Node.js — это среда, которая помогает вам запускать JavaScript на стороне сервера, в узле есть десятки библиотек, которые помогут вам построить безопасные и быстрые внутренние серверы.

В этой серии мы будем использовать:

  • Express.js: быстрый, бескомпромиссный, минималистичный веб-фреймворк. которые помогут вам создавать веб-приложения и API.
  • Passport.js: Passport — промежуточное ПО аутентификации для Node.js. который имеет несколько стратегий аутентификации, таких как Google, Facebook и Twitter.
  • PostgreSQL: бесплатная система управления реляционными базами данных с открытым исходным кодом, в которой особое внимание уделяется расширяемости и совместимости с SQL.
  • Призма: ORM для PostgreSQL. вы можете узнать больше об ORM здесь.

Перед погружением

Итак, прежде чем мы углубимся в написание нашего кода и некоторой логики, давайте узнаем разницу между аутентификацией и авторизацией.

Аутентификация: это процесс идентификации чьей-либо личности путем подтверждения того, что человек соответствует тому, на что он претендует.

Авторизация: это процесс предоставления кому-либо каких-либо действий. Это означает, что это способ проверить, есть ли у пользователя разрешение на использование ресурса или нет.

Чтобы узнать больше, проверьте этот блог.

Установка

Теперь пришло время приступить к настройке нашего проекта.

Примечание. Убедитесь, что на вашем компьютере установлены Node.js, PostgreSQL,и Prisma studio.

Прежде всего, создайте папку с именем prisma-auth.

Откройте папку в вашем cmd/терминале и введите команду:

npm init -y

с помощью флага -y, чтобы использовать значения по умолчанию для вопросов.

Теперь файл package.json будет создан в корне вашего проекта.

Время настроить нашу среду разработки:

npm i -D nodemon cross-env prettier
  • nodemon: перезапустить наш сервер, когда файл был изменен, создан.
  • красивее: форматировщик кода.
  • cross-env: запуск сценариев, которые устанавливают и используют переменные среды на разных платформах.

В проекте root создайте файл с именем .prettierrc.json :

{
    "semi": true,
    "tabWidth": 2
    "useTabs": false,
    "singleQuote": false,
    "traillingComma": "none
}

Теперь давайте установим наши зависимости:

npm i express express-session cookie-parser jsonwebtoken prisma @prisma/client bcryptjs cors dotenv passport passport-local passport-jwt

создайте папку src, внутри папки src создайте новый файл с именем app.js

const express = require("express");
const cookies = require("cookie-parser");
const session = require("express-session");
const passport = require("passport");
const cors = require("cors")
require("dotenv").config();
// Initialize a express application
const app = express();
app.use(express.json());
app.use(cors());
// initialize session
app.use(session({
name: process.env.SESSION_NAME,
secret: process.env.SESSION_SECRET,
saveUninitialized: false,
resave: false,
cookie: {maxAge: process.env.COOKIE_EXPIRE * 24 * 24 * 60 * 1000}
}));
app.use(cookies());
// Initialize passport
require("./passport/local")(passport);
app.use(passport.initialize());
app.use(passport.session());
// Start the app
const PORT = process.env.PORT;
app.listen(PORT, console.log("server have been lift off 🚀"));

В корне вашего проекта создайте новый файл .env с содержимым:

Давайте проверим нашу работу! в файле package.json и внутри scripts добавьте следующее:

Итак, в вашем cmd/терминале введите: npm run dev .

Итак, для этой части достаточно.

Во второй части — 02 мы начнем создавать наши модели, логику входа/регистрации с использованием стратегии passport-local и некоторые вспомогательные функции.