Загрузка…
Загрузка…
Node.js · middle · сложность 5
Обновить концепцию токена:
Рекомендации по хранению:
Пример реализации:
const crypto = require('crypto');
const jwt = require('jsonwebtoken');
// Generate tokens
function generateTokens(user) {
const accessToken = jwt.sign({ userId: user.id }, process.env.JWT_SECRET, {
expiresIn: '15m',
});
const refreshToken = crypto.randomBytes(64).toString('hex');
// Save refresh token in DB
saveRefreshTokenToDB(refreshToken, user.id);
return { accessToken, refreshToken };
}
// Endpoint to refresh token
app.post('/auth/refresh', async (req, res) => {
const { refreshToken } = req.body;
const stored = await findRefreshTokenInDB(refreshToken);
if (!stored || stored.expiresAt < new Date()) {
return res.status(403).json({ error: 'Invalid refresh token' });
}
// Invalidate old token
await invalidateToken(refreshToken);
// Issue new tokens
const user = await findUserById(stored.userId);
const tokens = generateTokens(user);
res.json(tokens);
});Лучшие практики:
Ключевой вывод для интервью: как работают токены обновления и как их следует хранить и ротировать?