Как выяснили в комментариях, проблема в длине токенов, т.к. bcrypt может принять в себя только 72 байта.
Для конкретного случая - использование bcrypt для хеширования jwt токенов, можно использовать только сингатурную часть токена, в этом случае bcrypt работает.
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const payload = {
sub: 1,
email: 'testt@test.test'
}
const token1 = jwt.sign(payload, 'secret_1');
const token1Signature = token1.split('.').pop()
const token1SignatureHashed = bcrypt.hashSync(token1Signature, 5);
const token2 = jwt.sign(payload, 'secret_2');
const token2Signature = token2.split('.').pop()
const token2SignatureHashed = bcrypt.hashSync(token2Signature, 5);
console.log(`Token1 sig: ${token1Signature}\n`);
console.log(`Token1 sig hashed: ${token1SignatureHashed}\n`);
console.log(`Token2 sig: ${token2Signature}\n`);
console.log(`Token2 sig hashed: ${token2SignatureHashed}\n`);
console.log(`Compare token1Sig vs token1SigHashed: ${bcrypt.compareSync(token1Signature, token1SignatureHashed)}`);
console.log(`Compare token1Sig vs token2SigHashed: ${bcrypt.compareSync(token1Signature, token2SignatureHashed)}`);
console.log(`Compare token2Sig vs token2SigHashed: ${bcrypt.compareSync(token2Signature, token2SignatureHashed)}`);
console.log(`Compare token2Sig vs token1SigHashed: ${bcrypt.compareSync(token2Signature, token1SignatureHashed)}`);
Вывод в консоль:
Token1 sig: Z_cIJxKYkQsUWbu1hiRBiFjQOVGehfvcEH1SxJtBBvM
Token1 sig hashed: $2a$05$4yGh8r.YeNsrV3D9i/snMe6QMT1Pt7ZKBOlCZpSypcEdO4xZEnx7K
Token2 sig: XCVtQYxAGDcMMqCQBIitRyok61zJhzcr3c6PZppID2I
Token2 sig hashed: $2a$05$okXRKv85XY88Tg/RhBwuoOwNfGNtjVm8gFI8dzm79SXSvWMTKrULa
Compare token1Sig vs token1SigHashed: true
Compare token1Sig vs token2SigHashed: false
Compare token2Sig vs token2SigHashed: true
Compare token2Sig vs token1SigHashed: false