@abel
Авторизация в Node.js может быть реализована с помощью различных библиотек и фреймворков, таких как Passport.js, jsonwebtoken и bcrypt.
Приведу пример реализации авторизации с использованием библиотеки Passport.js:
- Установите библиотеку Passport.js и необходимые стратегии (например, Local Strategy для аутентификации с помощью имени пользователя и пароля) с помощью npm:
1
|
npm install passport passport-local
|
- Подключите библиотеку 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);
});
});
|
- Добавьте 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
2
3
4
5
|
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
|
- Защитите ваши маршруты, которые должны быть доступны только авторизованным пользователям, с помощью 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
2
3
4
|
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
|
Это только пример, и реализация авторизации может быть настроена под конкретные требования вашего приложения.