Выдаёт ошибку во время генерирования токена
Если записать данные без .env, то всё работает исправно, в другом случае выдаёт ошибку
import * as jwt from 'jsonwebtoken'
import prisma from '../middleware/prisma-middleware'
import * as dotenv from 'dotenv';
dotenv.config();
class TokenService{
generateTokens(payload:any){
const accessToken = jwt.sign(payload,process.env.JWT_ACCESS_SECRET, {expiresIn:'30s'})
const refreshToken = jwt.sign(payload, process.env.JWT_REFRESH_SECRET, {expiresIn:'30d'})
return {
accessToken,
refreshToken
}
}
}
export default new TokenService()
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
Ваша IDE подсказывает ошибку из-за того, что данные из process.env имеют тип string | undefined, а на стороне библиотеки jwt ожидается
export type Secret =
| string
| Buffer
| KeyObject
| { key: string | Buffer; passphrase: string }
Undefined не подходит.
Добавьте проверку входящих значений и используйте Non-null assertion operator (JWT_ACCESS_SECRET!), чтобы "подтвердить" typescript, что переменная будет определена.
Например, так:
import assert from 'node:assert';
import * as jwt from 'jsonwebtoken'
import * as dotenv from 'dotenv';
dotenv.config();
class TokenService {
generateTokens(payload: any) {
const { JWT_ACCESS_SECRET, JWT_REFRESH_SECRET } = process.env;
assert(!!JWT_ACCESS_SECRET && !!JWT_REFRESH_SECRET);
const accessToken = jwt.sign(
payload,
JWT_ACCESS_SECRET!,
{ expiresIn: '30s' }
);
const refreshToken = jwt.sign(
payload,
JWT_REFRESH_SECRET!,
{ expiresIn: '30d' }
);
return {
accessToken,
refreshToken
};
}
}
export default new TokenService();
