I was trying to get the access token by a refresh token. Using Typeorm along with mongoDB. I am passing the id but findone is not getting any user from DB. If I print the Id that is perfect.
Refresh token code:
app.post("/refreshToken", async (req, res) => {
// Read the incoming cookie
const token = req.cookies.jid;
// check if there is no token
if(!token){ console.log("Case 1"); return res.send({ ok: false, accessToken: "" }) }
// check if the token is not expired or valid
let payload: any = null;
try {
payload = verify(token, process.env.REFRESH_TOKEN_SECRET!)
} catch (error) {
console.log(error);
return res.send({ ok: false, accessToken: "" })
}
// If token exists, Read the UserID from payload as
// we have put userID while creating refresh token
// console.log("UID : " + payload.userId as ObjectID);
const user = await User.findOne( { where: {"_id": payload.userId} } )
console.log("USER : " + user);
// By any chance if there is no user found return no refresh token
if(!user) { console.log("Case 2"); return res.send({ ok: false, accessToken: "" }) }
// If there is an User; Return the refresh token
return res.send({ ok: true, accessToken: createAccessToken(user) });
});
Response is :
USER : undefined
Case 2
Here is the code for refresh and accesstoken
import { sign } from 'jsonwebtoken';
import { User } from './entity/User';
export const createAccessToken = (user: User) => {
return sign({ userId: user.id }, process.env.ACCESS_TOKEN_SECRET!, {
expiresIn: "15m"
})
}
// by adding ! it refers that the type is already defined
export const createRefreshToken = (user: User) => {
return sign({userId: user.id, }, process.env.REFRESH_TOKEN_SECRET!, {
expiresIn: "1d"
})
}
Package.json:
{
"name": "server",
"version": "0.0.1",
"description": "Awesome project developed with TypeORM.",
"devDependencies": {
"@types/bcryptjs": "^2.4.2",
"@types/cookie-parser": "^1.4.2",
"@types/express": "^4.17.8",
"@types/graphql": "^14.5.0",
"@types/jsonwebtoken": "^8.5.0",
"@types/node": "^14.14.6",
"nodemon": "^2.0.6",
"ts-node": "9.0.0",
"typescript": "4.0.5"
},
"dependencies": {
"apollo-server-express": "^2.19.0",
"bcryptjs": "^2.4.3",
"cookie-parser": "^1.4.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"graphql": "^15.4.0",
"jsonwebtoken": "^8.5.1",
"mongodb": "^3.0.8",
"reflect-metadata": "^0.1.13",
"type-graphql": "^1.1.1",
"typeorm": "0.2.28"
},
"scripts": {
"start": "nodemon --exec ts-node src/index.ts"
}
}
According to the documentation of typeorm,I guess you used the query criteria incorrectly.
Try the following:
const user = await repository.findOne(payload.userId); // find by id
//or
const user = await repository.findOne({"_id": payload.userId});