this is my user controller code :-
<code>const Users = require('../models/userModel');
const bcrypt = require('bcrypt');
const { createReadStream } = require('fs');
const jwt = require('jsonwebtoken');
const userCtr = {
register : async(req, res) => {
try {
const { name , email , password}= req.body;
const user = await Users.findOne({email})
if ( user ) return res.status(400).json
({msg : "The email already exists."})
if(password.length < 6)
return res.status(400).json
({msg : "Password is at least 6 characters long."})
// password encryption
const passwordHash = await bcrypt.hash(password, 10);
const newUser = new Users({
name , email , password : passwordHash
})
// save mongoDB
await newUser.save();
// create jwt to authenticate
const accesstoken = createAccessToken({id : newUser._id})
const refreshtoken = createRefreshToken({id : newUser._id})
res.cookie('refreshtoken' , refreshtoken , {
httpOnly : true ,
path : '/user/refresh_token'
})
res.json({accesstoken})
}
catch (err) {
return res.status(500).json({msg : err.message})
}
} ,
refreshtoken : async ( req , res )=>{
try {
const rf_token = req.cookies.refreshtoken;
if(!rf_token)return res.status(400).json({msg :" login or reguster"});
jwt.verify(rf_token, process.env.REFRESH_SECRET,(err , user)=>{
if(err)return res.status(400).json({msg : "login or register"});
const accesstoken = createAccessToken({id : user.id})
res.json({user , accesstoken})
})
}
catch(err) {
return res.status(500).json({msg : err.message});
}
}
}
const createAccessToken=(payload)=>{
return jwt.sign(payload, process.env.JWT_SECRET , {expiresIn : "1d"});
}
const createRefreshToken=(payload)=>{
return jwt.sign(payload, process.env.REFRESH_SECRET, {expiresIn : "7d"});
}
module.exports = userCtr;
</code>
<code>const Users = require('../models/userModel');
const bcrypt = require('bcrypt');
const { createReadStream } = require('fs');
const jwt = require('jsonwebtoken');
const userCtr = {
register : async(req, res) => {
try {
const { name , email , password}= req.body;
const user = await Users.findOne({email})
if ( user ) return res.status(400).json
({msg : "The email already exists."})
if(password.length < 6)
return res.status(400).json
({msg : "Password is at least 6 characters long."})
// password encryption
const passwordHash = await bcrypt.hash(password, 10);
const newUser = new Users({
name , email , password : passwordHash
})
// save mongoDB
await newUser.save();
// create jwt to authenticate
const accesstoken = createAccessToken({id : newUser._id})
const refreshtoken = createRefreshToken({id : newUser._id})
res.cookie('refreshtoken' , refreshtoken , {
httpOnly : true ,
path : '/user/refresh_token'
})
res.json({accesstoken})
}
catch (err) {
return res.status(500).json({msg : err.message})
}
} ,
refreshtoken : async ( req , res )=>{
try {
const rf_token = req.cookies.refreshtoken;
if(!rf_token)return res.status(400).json({msg :" login or reguster"});
jwt.verify(rf_token, process.env.REFRESH_SECRET,(err , user)=>{
if(err)return res.status(400).json({msg : "login or register"});
const accesstoken = createAccessToken({id : user.id})
res.json({user , accesstoken})
})
}
catch(err) {
return res.status(500).json({msg : err.message});
}
}
}
const createAccessToken=(payload)=>{
return jwt.sign(payload, process.env.JWT_SECRET , {expiresIn : "1d"});
}
const createRefreshToken=(payload)=>{
return jwt.sign(payload, process.env.REFRESH_SECRET, {expiresIn : "7d"});
}
module.exports = userCtr;
</code>
const Users = require('../models/userModel');
const bcrypt = require('bcrypt');
const { createReadStream } = require('fs');
const jwt = require('jsonwebtoken');
const userCtr = {
register : async(req, res) => {
try {
const { name , email , password}= req.body;
const user = await Users.findOne({email})
if ( user ) return res.status(400).json
({msg : "The email already exists."})
if(password.length < 6)
return res.status(400).json
({msg : "Password is at least 6 characters long."})
// password encryption
const passwordHash = await bcrypt.hash(password, 10);
const newUser = new Users({
name , email , password : passwordHash
})
// save mongoDB
await newUser.save();
// create jwt to authenticate
const accesstoken = createAccessToken({id : newUser._id})
const refreshtoken = createRefreshToken({id : newUser._id})
res.cookie('refreshtoken' , refreshtoken , {
httpOnly : true ,
path : '/user/refresh_token'
})
res.json({accesstoken})
}
catch (err) {
return res.status(500).json({msg : err.message})
}
} ,
refreshtoken : async ( req , res )=>{
try {
const rf_token = req.cookies.refreshtoken;
if(!rf_token)return res.status(400).json({msg :" login or reguster"});
jwt.verify(rf_token, process.env.REFRESH_SECRET,(err , user)=>{
if(err)return res.status(400).json({msg : "login or register"});
const accesstoken = createAccessToken({id : user.id})
res.json({user , accesstoken})
})
}
catch(err) {
return res.status(500).json({msg : err.message});
}
}
}
const createAccessToken=(payload)=>{
return jwt.sign(payload, process.env.JWT_SECRET , {expiresIn : "1d"});
}
const createRefreshToken=(payload)=>{
return jwt.sign(payload, process.env.REFRESH_SECRET, {expiresIn : "7d"});
}
module.exports = userCtr;
so after registering the user and getting the access token when i try for the refresh token even though i get the cookie i get a CANNOT POST error in my body
for further references theese are my server file code and router codes respectively
server :-
<code>const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const mongoose = require('mongoose');
require('dotenv').config();
const cookieParser = require('cookie-parser');
app.use(cookieParser());
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({ message: 'Hello World!' });
})
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
// routes
app.use('/user' , require('./routes/userRoute'));
// connect mongo
const URI = process.env.MONGODB_URL ;
mongoose.connect(URI, {
}).then(() => {
console.log('Connected to MongoDB');
}).catch(err =>{
console.log(err);
});
</code>
<code>const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const mongoose = require('mongoose');
require('dotenv').config();
const cookieParser = require('cookie-parser');
app.use(cookieParser());
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({ message: 'Hello World!' });
})
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
// routes
app.use('/user' , require('./routes/userRoute'));
// connect mongo
const URI = process.env.MONGODB_URL ;
mongoose.connect(URI, {
}).then(() => {
console.log('Connected to MongoDB');
}).catch(err =>{
console.log(err);
});
</code>
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const mongoose = require('mongoose');
require('dotenv').config();
const cookieParser = require('cookie-parser');
app.use(cookieParser());
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({ message: 'Hello World!' });
})
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
// routes
app.use('/user' , require('./routes/userRoute'));
// connect mongo
const URI = process.env.MONGODB_URL ;
mongoose.connect(URI, {
}).then(() => {
console.log('Connected to MongoDB');
}).catch(err =>{
console.log(err);
});
router :-
<code>
const router = require('express').Router();
const userCtr = require('../controllers/userController');
router.post('/register', userCtr.register);
router.post('/refreshtoken', userCtr.refreshtoken);
module.exports = router;
</code>
<code>
const router = require('express').Router();
const userCtr = require('../controllers/userController');
router.post('/register', userCtr.register);
router.post('/refreshtoken', userCtr.refreshtoken);
module.exports = router;
</code>
const router = require('express').Router();
const userCtr = require('../controllers/userController');
router.post('/register', userCtr.register);
router.post('/refreshtoken', userCtr.refreshtoken);
module.exports = router;
i tried to solve it for a long time but just couldn’t find the error your help will be appreciated folks !