Как реализовать авторизацию в node.js?

Пользователь

от abel , в категории: JavaScript , 2 года назад

Как реализовать авторизацию в node.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kenya , 2 года назад

@abel 

Авторизация в Node.js может быть реализована с помощью различных библиотек и фреймворков, таких как Passport.js, jsonwebtoken и bcrypt.


Приведу пример реализации авторизации с использованием библиотеки Passport.js:

  1. Установите библиотеку Passport.js и необходимые стратегии (например, Local Strategy для аутентификации с помощью имени пользователя и пароля) с помощью npm:
1
npm install passport passport-local


  1. Подключите библиотеку Passport.js и настройте ее:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

// Настройка стратегии аутентификации
passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

// Настройка сериализации/десериализации пользователя
passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});


  1. Добавьте Passport.js middleware в вашу Node.js приложение:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const app = express();

app.use(require('morgan')('combined'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('express-session')({ secret: 'keyboard cat', resave: false, saveUninitialized: false }));

// Использование Passport.js middleware
app.use(passport.initialize());
app.use(passport.session());


  1. Добавьте маршруты для аутентификации (например, маршрут для входа в систему):
1
2
3
4
5
app.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });


  1. Защитите ваши маршруты, которые должны быть доступны только авторизованным пользователям, с помощью middleware passport.authenticate():
1
2
3
4
5
app.get('/profile', 
  require('connect-ensure-login').ensureLoggedIn(),
  function(req, res){
    res.render('profile', { user: req.user });
  });


  1. Добавьте маршрут для выхода из системы:
1
2
3
4
app.get('/logout', function(req, res){
  req.logout();
  res.redirect('/');
});


Это только пример, и реализация авторизации может быть настроена под конкретные требования вашего приложения.

Пользователь

от jaren , 8 месяцев назад

@abel 

Еще одним распространенным способом реализации авторизации в Node.js является использование JSON Web Tokens (JWT). Приведу пример простой реализации авторизации с использованием JWT:

  1. Установите библиотеку jsonwebtoken с помощью npm:
1
npm install jsonwebtoken


  1. Создайте маршрут для аутентификации и выдачи токена:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const jwt = require('jsonwebtoken');
const express = require('express');
const router = express.Router();

router.post('/login', (req, res) => {
  // Проверка имени пользователя и пароля
  if (req.body.username === 'admin' && req.body.password === 'password') {
    // Генерация JWT token
    const token = jwt.sign({ username: req.body.username }, 'secretkey', { expiresIn: '1h' });
    res.json({ token });
  } else {
    res.status(401).send('Authentication failed');
  }
});

module.exports = router;


  1. Создайте middleware для проверки JWT токена:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
const jwt = require('jsonwebtoken');

const verifyToken = (req, res, next) => {
  const token = req.headers.authorization;

  if (!token) {
    return res.status(401).send('Access denied. No token provided');
  }

  try {
    const decoded = jwt.verify(token, 'secretkey');
    req.user = decoded;
    next();
  } catch (error) {
    res.status(400).send('Invalid token');
  }
};

module.exports = verifyToken;


  1. Защитите маршруты, которые должны быть доступны только авторизованным пользователям, с использованием middleware verifyToken:
1
2
3
4
5
6
7
8
9
const express = require('express');
const router = express.Router();
const verifyToken = require('./verifyToken');

router.get('/profile', verifyToken, (req, res) => {
  res.json({ message: 'You have access to this profile' });
});

module.exports = router;


  1. Подключите маршруты к вашему приложению Express:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const express = require('express');
const app = express();
const authRoutes = require('./authRoutes');
const protectedRoutes = require('./protectedRoutes');

app.use(express.json());

app.use('/auth', authRoutes);
app.use('/protected', protectedRoutes);

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});


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