@roxanne.hauck
Существует множество способов реализации авторизации в Node.js, но одним из наиболее распространенных является использование библиотеки passport
. Рассмотрим пример реализации базовой авторизации с использованием passport
и express
:
- Установите passport и необходимые стратегии аутентификации (например, passport-local для аутентификации по логину и паролю) с помощью npm:
1
|
npm install passport passport-local
|
- Импортируйте необходимые модули в вашем приложении:
1
2
3
4
|
const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const session = require('express-session');
|
- Настройте passport и express-session:
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
27
28
29
30
31
32
33
|
const app = express();
// настройка express-session
app.use(session({
secret: 'my-secret-key',
resave: false,
saveUninitialized: false
}));
// настройка passport
app.use(passport.initialize());
app.use(passport.session());
// определение стратегии аутентификации
passport.use(new LocalStrategy(
function(username, password, done) {
// здесь можно проверить логин и пароль пользователя
if (username === 'user' && password === 'password') {
return done(null, { username: 'user' });
} else {
return done(null, false);
}
}
));
// сериализация и десериализация пользователя
passport.serializeUser(function(user, done) {
done(null, user.username);
});
passport.deserializeUser(function(username, done) {
done(null, { username: username });
});
|
- Создайте маршруты для входа и выхода из системы:
1
2
3
4
5
6
7
8
9
10
11
12
|
// маршрут для входа в систему
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
// маршрут для выхода из системы
app.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});
|
- Защитите ваши маршруты, которые требуют авторизации, с помощью функции ensureAuthenticated:
1
2
3
4
5
6
7
8
9
10
11
12
|
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
res.redirect('/login');
}
}
// защита маршрута
app.get('/protected', ensureAuthenticated, function(req, res) {
res.send('This page is protected.');
});
|
Это базовый пример реализации авторизации в Node.js с использованием passport
. При необходимости можно дополнить этот пример дополнительной логикой, например, добавить проверку прав доступа или использовать другие стратегии аутентификации.