I am trying to login with Passport Google OAuth. I must give a JWT to my middleware. The second parameter (auth) is my middleware. Without middleware, it returns {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}
(It is from res.json({token}))
router.get(
"/google/redirect",
auth,
passport.authenticate("google", { session: false }),
(req, res) => {
const payload = {
user: {
id: req.user.id,
},
};
try {
jwt.sign(
payload,
config.get("jwtSecret"),
{ expiresIn: 360000 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
}
);
With middleware, it returns {"msg":"No token, authorization denied"}. I can't send jsonwebtoken. I was able to send in the login system. To make a short note, I am using MERN (mongo, express, react, node)
const jwt = require("jsonwebtoken");
const config = require("config");
module.exports = async function(req, res, next) {
const token = req.header("x-auth-token");
if (!token) {
return res.status(401).json({ msg: "No token, authorization denied" });
}
try {
await jwt.verify(token, config.get("jwtSecret"), (error, decoded) => {
if (error) {
res.status(401).json({ msg: "Token is not valid" });
} else {
req.user = decoded.user;
next();
}
});
} catch (err) {
console.error("something wrong with auth middleware");
res.status(500).json({ msg: "Server Error" });
}
};
My working login system was:
router.post(
"/",
async (req, res) => {
const { email, password } = req.body;
try {
let user = await User.findOne({ email });
const isMatch = await bcrypt.compare(password, user.password);
const payload = {
user: {
id: user.id,
},
};
jwt.sign(
payload,
config.get("jwtSecret"),
{ expiresIn: 360000 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send("Sunucu hatası");
}
}
);