auth0 / node-jsonwebtoken

JsonWebToken implementation for node.js http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html
MIT License
17.75k stars 1.23k forks source link

TypeError: validator.isValid is not a function #927

Open tonykaram1993 opened 1 year ago

tonykaram1993 commented 1 year ago

ISSUE WAS FOUND AND FIXED - LOOK HERE https://github.com/auth0/node-jsonwebtoken/issues/927#issuecomment-1694701319

Description

Basically whenever I try to run jsonwebtoken.sign() in typescript it gives me an error. Running the code in a simple javascript code runner works perfectly fine.

I have been trying to debug this for a couple of days now, can't seem to figure it out.

Reproduction

Link to code I am working with: https://github.com/tonykaram1993/typescript-express-starter/blob/e6975e805f7f5b332e389d723d63a5641959ce15/src/services/authentication.services.ts#L64

The error log and a couple of log messages above it so you are able to see what is passed:

[watch] 
[watch] 
[watch] 2:42:24 PM - Found 0 errors. Watching for file changes.
[server] info: Server is running at https://localhost:5000
[server] info: Connected to MongoDB! [mongodb://localhost:27017/typescript]
[server] TKCL - JWT_TOKEN_SECRET: secretsecretsecretsecretsecretsecretsecret
[server] TKCL - data: {
[server]   email: 'john@thedoes.com',
[server]   passwordHash: '$2b$10$E.w9gKA4KsZU1LdN0KN99eCvAyteG/.xboV.ppGoh3gmiVWsJPyIi',
[server]   salt: '$2b$10$E.w9gKA4KsZU1LdN0KN99e',
[server]   _id: new ObjectId("64cf8723a2210d51f1731e86"),
[server]   __v: 0
[server] }
[server] TKCL - settingsConfig.AUTHENTICATION.jwtTokenExpiry: 1h
[server] POST /authentication/signup 500 72.621 ms - 1051
[server] POST /authentication/signup 500 72.621 ms - 1051
[server] TypeError: validator.isValid is not a function
[server]     at /Users/tk/Repositories/typescript-starter/node_modules/jsonwebtoken/sign.js:49:22
[server]     at Array.forEach (<anonymous>)
[server]     at validate (/Users/tk/Repositories/typescript-starter/node_modules/jsonwebtoken/sign.js:41:6)
[server]     at validatePayload (/Users/tk/Repositories/typescript-starter/node_modules/jsonwebtoken/sign.js:60:10)
[server]     at Object.module.exports [as sign] (/Users/tk/Repositories/typescript-starter/node_modules/jsonwebtoken/sign.js:138:7)
[server]     at Object.generateJwtToken (/Users/tk/Repositories/typescript-starter/dist/src/services/authentication.services.js:31:45)
[server]     at signup (/Users/tk/Repositories/typescript-starter/dist/src/controllers/authentication.controllers.js:29:56)
[server]     at processTicksAndRejections (node:internal/process/task_queues:96:5)

Environment

Library version:

"@types/jsonwebtoken": "^9.0.2",
"jsonwebtoken": "^9.0.1",

Express version:

"express": "^4.18.2",
    "@types/express": "^4.17.14",

Running macOs 13.4.1 on MacBook Pro 16" M1 Pro.

Happy to answer any questions.

EDIT: an update about a comment i left below https://github.com/auth0/node-jsonwebtoken/issues/927#issuecomment-1694451532

Alright, so I have an update regarding this.

I have been debugging for a week now (on and off), and I found something.

When I remove the following line https://github.com/tonykaram1993/typescript-express-starter/blob/feature/authentication/src/services/authentication.services.ts#L3C1-L3C38 - basically stop using lodash in the file where jsonwebtoken.sign is called, everything works totally fine. Everything also works when I import lodash but not use it in the file.

So importing lodash breaks jsonwebtoken? Did I do something wrong that I need to change?

tonykaram1993 commented 1 year ago

Bump!

tonykaram1993 commented 1 year ago

Alright, so I have an update regarding this.

I have been debugging for a week now (on and off), and I found something.

When I remove the following line https://github.com/tonykaram1993/typescript-express-starter/blob/feature/authentication/src/services/authentication.services.ts#L3C1-L3C38 - basically stop using lodash in the file where jsonwebtoken.sign is called, everything works totally fine. Everything also works when I import lodash but not use it in the file.

So importing lodash breaks jsonwebtoken? Did I do something wrong that I need to change?

tonykaram1993 commented 1 year ago

Alright, so scratch everything I said. It turned out to be that when I was getting the user (at https://github.com/tonykaram1993/typescript-express-starter/blob/feature/authentication/src/controllers/authentication.controllers.ts#L50C60-L50C60), I was getting a MongoDb Document instead of a plain object.

All I did was to transform it into an object using user.toObject() (https://github.com/tonykaram1993/typescript-express-starter/blob/feature/authentication/src/services/user.services.ts#L27). But it's weird that the error given by jsonwebtoken was not clear. I should have gotten the payload is not a plain object error instead of validator.isValid is not a function error.

I am not sure if this should be marked as resolved or if I should keep it open? I will leave that up to you guys.