🎯 Рекомендуемые коллекции
Балансированные коллекции примеров кода из различных категорий, которые вы можете исследовать
Промежуточное ПО Аутентификации Passport.js
Промежуточное ПО аутентификации Node.js с Passport.js и различными стратегиями
💻 Локальная Стратегия Passport.js javascript
🟡 intermediate
⭐⭐⭐
Локальная аутентификация с Passport.js
⏱️ 15 min
🏷️ passport, authentication, local, security
Prerequisites:
Node.js, Express.js, Passport.js
// Passport.js Local Strategy Setup
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const express = require('express');
// User database (in production, use a real database)
const users = {
'[email protected]': {
id: 1,
email: '[email protected]',
password: bcrypt.hashSync('password123', 10),
name: 'John Doe'
}
};
// Local Strategy
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password'
},
async (email, password, done) => {
try {
const user = users[email];
if (!user) {
return done(null, false, { message: 'User not found' });
}
const isValid = await bcrypt.compare(password, user.password);
if (!isValid) {
return done(null, false, { message: 'Invalid password' });
}
return done(null, user);
} catch (error) {
return done(error);
}
}
));
// Serialize/deserialize user
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser((id, done) => {
const user = Object.values(users).find(u => u.id === id);
done(null, user);
});
// Express app setup
const app = express();
app.use(express.json());
app.use(require('express-session')({ secret: 'secret' }));
app.use(passport.initialize());
app.use(passport.session());
// Authentication middleware
const authMiddleware = (req, res, next) => {
if (req.isAuthenticated()) {
return next();
}
res.status(401).json({ error: 'Unauthorized' });
};
// Routes
app.post('/login', passport.authenticate('local'), (req, res) => {
res.json({ user: req.user });
});
app.get('/profile', authMiddleware, (req, res) => {
res.json({ user: req.user });
});
app.post('/logout', (req, res) => {
req.logout();
res.json({ message: 'Logged out' });
});
app.listen(3000, () => console.log('Server running on port 3000'));
💻 Passport.js Google OAuth 2.0 javascript
🟡 intermediate
⭐⭐⭐
Аутентификация Google OAuth 2.0 с Passport.js
⏱️ 20 min
🏷️ passport, google, oauth2, social, authentication
Prerequisites:
Node.js, Google Console, OAuth 2.0
// Passport.js Google OAuth 2.0
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
// Google Strategy
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: '/auth/google/callback'
}, (accessToken, refreshToken, profile, done) => {
// Find or create user in your database
const user = {
id: profile.id,
email: profile.emails[0].value,
name: profile.displayName,
avatar: profile.photos[0].value
};
return done(null, user);
}));
// Routes
app.get('/auth/google', passport.authenticate('google'));
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/' }),
(req, res) => {
res.redirect('/dashboard');
}
);
// Middleware to check authentication
const ensureAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) return next();
res.redirect('/');
};
💻 Стратегия JWT Passport.js javascript
🟡 intermediate
⭐⭐⭐
Аутентификация JWT с Passport.js для API
⏱️ 15 min
🏷️ passport, jwt, authentication, api, security
Prerequisites:
Node.js, JWT concepts, APIs
// Passport.js JWT Strategy
const passport = require('passport');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const jwt = require('jsonwebtoken');
// JWT Strategy
passport.use(new JwtStrategy({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'your-secret-key'
}, (payload, done) => {
// Find user by ID from payload
const user = { id: payload.sub, email: payload.email };
return done(null, user);
}));
// Generate JWT token
function generateToken(user) {
return jwt.sign(
{ sub: user.id, email: user.email },
'your-secret-key',
{ expiresIn: '1h' }
);
}
// Login route
app.post('/login', (req, res) => {
// Validate credentials (simplified)
const user = { id: 1, email: req.body.email };
const token = generateToken(user);
res.json({ token, user });
});
// Protected route middleware
const authMiddleware = passport.authenticate('jwt', { session: false });
// Protected API route
app.get('/api/profile', authMiddleware, (req, res) => {
res.json({ user: req.user });
});
💻 Пользовательская Стратегия Passport.js javascript
🔴 complex
⭐⭐⭐⭐
Создание пользовательских стратегий с Passport.js
⏱️ 20 min
🏷️ passport, custom, api key, advanced
Prerequisites:
Node.js, Passport.js, Custom strategies
// Custom Passport Strategy
const passport = require('passport');
const { Strategy } = require('passport-local');
// Custom API Key Strategy
class ApiKeyStrategy extends Strategy {
constructor(verifyCallback) {
super({ apiKeyField: 'apiKey' }, verifyCallback);
}
authenticate(req, options) {
const apiKey = req.query.apiKey || req.headers['x-api-key'];
if (!apiKey) {
return this.fail({ message: 'API key required' });
}
// Validate API key against database
this.verify(apiKey, (err, user) => {
if (err) return this.error(err);
if (!user) return this.fail({ message: 'Invalid API key' });
return this.success(user);
});
}
}
// Use custom strategy
passport.use('apikey', new ApiKeyStrategy(
(apiKey, done) => {
// Database lookup
const validKeys = {
'key123': { id: 1, name: 'App 1' },
'key456': { id: 2, name: 'App 2' }
};
const user = validKeys[apiKey];
done(null, user);
}
));
// API endpoint with custom auth
app.get('/api/data',
passport.authenticate('apikey', { session: false }),
(req, res) => {
res.json({ data: 'Protected data', user: req.user });
}
);