Files
crm-server/src/utils/jwt.js
2025-11-18 13:53:28 +01:00

86 lines
2.1 KiB
JavaScript

import jwt from 'jsonwebtoken';
/**
* Generuje access JWT token
* @param {Object} payload - User data (id, username, role)
* @returns {string} JWT token
*/
export const generateAccessToken = (payload) => {
return jwt.sign(payload, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRES_IN || '1h',
});
};
/**
* Generuje refresh JWT token
* @param {Object} payload - User data (id)
* @returns {string} Refresh token
*/
export const generateRefreshToken = (payload) => {
return jwt.sign(payload, process.env.JWT_REFRESH_SECRET, {
expiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '7d',
});
};
/**
* Overí access JWT token
* @param {string} token - JWT token
* @returns {Object} Decoded payload
* @throws {Error} Ak je token neplatný alebo expirovaný
*/
export const verifyAccessToken = (token) => {
try {
return jwt.verify(token, process.env.JWT_SECRET);
} catch (error) {
if (error.name === 'TokenExpiredError') {
throw new Error('Token expiroval');
}
if (error.name === 'JsonWebTokenError') {
throw new Error('Neplatný token');
}
throw error;
}
};
/**
* Overí refresh JWT token
* @param {string} token - Refresh token
* @returns {Object} Decoded payload
* @throws {Error} Ak je token neplatný alebo expirovaný
*/
export const verifyRefreshToken = (token) => {
try {
return jwt.verify(token, process.env.JWT_REFRESH_SECRET);
} catch (error) {
if (error.name === 'TokenExpiredError') {
throw new Error('Refresh token expiroval');
}
if (error.name === 'JsonWebTokenError') {
throw new Error('Neplatný refresh token');
}
throw error;
}
};
/**
* Vytvorí obidva tokeny (access + refresh)
* @param {Object} user - User object
* @returns {Object} { accessToken, refreshToken }
*/
export const generateTokenPair = (user) => {
const payload = {
id: user.id,
username: user.username,
role: user.role,
};
const refreshPayload = {
id: user.id,
};
return {
accessToken: generateAccessToken(payload),
refreshToken: generateRefreshToken(refreshPayload),
};
};