Пошаговое руководство по входу и регистрации в локальной стратегии с помощью Passport

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

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

  1. На вашем компьютере установлены Node.js и npm.
  2. Базовые знания JavaScript и концепций веб-разработки.
  3. Знакомство с Express.js, популярной платформой веб-приложений для Node.js.

Шаг 1. Настройка проекта Node.js
Сначала создайте новый каталог для своего проекта и перейдите к нему в своем терминале. Затем инициализируйте новый проект Node.js, выполнив следующую команду:

npm init -y

Шаг 2. Установите зависимости
Чтобы использовать Passport и его локальную стратегию, вам необходимо установить необходимые зависимости. В каталоге вашего проекта выполните следующую команду:

npm install express passport passport-local bcrypt

Шаг 3. Настройка Passport
Создайте новый файл с именем passport-config.jsи добавьте следующий код для настройки Passport:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
// Replace this with your user model
const User = require('./models/user');
passport.use(
  new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
    User.findOne({ email: email }, (err, user) => {
      if (err) return done(err);
      if (!user) return done(null, false, { message: 'Incorrect email.' });
      bcrypt.compare(password, user.password, (err, result) => {
        if (err) return done(err);
        if (!result) return done(null, false, { message: 'Incorrect password.' });
        return done(null, user);
      });
    });
  })
);

Шаг 4. Реализация маршрутов для входа и регистрации
Создайте новый файл с именем routes.jsи добавьте следующий код для определения маршрутов для входа и регистрации:

const express = require('express');
const passport = require('passport');
const router = express.Router();
router.post('/login', passport.authenticate('local'), (req, res) => {
  // Handle successful login
  res.json({ message: 'Login successful!' });
});
router.post('/register', async (req, res) => {
  try {
    const { email, password } = req.body;
    const hashedPassword = await bcrypt.hash(password, 10);
    // Replace this with your user model
    const user = new User({ email, password: hashedPassword });
    await user.save();
    res.json({ message: 'Registration successful!' });
  } catch (error) {
    res.status(500).json({ message: 'Error registering user.' });
  }
});
module.exports = router;

Шаг 5. Настройка сервера Express.js
Создайте новый файл с именем server.jsи добавьте следующий код для настройки сервера Express.js:

const express = require('express');
const passport = require('passport');
const session = require('express-session');
const app = express();
// Replace this with your user model
const User = require('./models/user');
const routes = require('./routes');
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false,
}));
app.use(passport.initialize());
app.use(passport.session());
app.use('/', routes);
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

Шаг 6. Запустите приложение
Чтобы запустить приложение, выполните в терминале следующую команду:

node server.js

В этой статье мы узнали, как реализовать локальную стратегию входа и регистрации с помощью Passport в проектах Node.js и Express.js. Следуя пошаговому руководству, вы сможете создать безопасную систему аутентификации для своего веб-приложения. Не забудьте настроить код в соответствии с вашими конкретными требованиями и моделью пользователя.