SITUATION:
I am trying to check if my user is authenticated when he makes a request to the server.
but when I calling req.cookies it allways show undefined. I don't what happening. I'm Using MERN Stack with redux
CODE:-
server side -
app.js -
const express = require('express')
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser')
const errorMiddlware = require('./middleware/error');
const cors = require('cors')
const fileUplode = require('express-fileupload')
const app = express();
app.use(cookieParser());
app.use(cors({credentials: true}))
app.use(express.json());
app.use(bodyParser.urlencoded({ extended: true, limit:'50mb'}));
app.use(express.json({ limit: "50mb" }));
app.use(express.urlencoded({ limit: "50mb", extended: true }));
app.use(fileUplode())
app.use(bodyParser.json());
//Route Imports
const user = require('./routes/userRoutes')
app.use('/api/v1/',user);
userController.js -
// Get User Detail
exports.getUserDetails = catchAsyncErrors(async (req, res, next) => {
const user = await User.findById(req.user.id);
res.status(200).json({
success: true,
user,
});
});
userRoutes.js
const express = require('express');
const { isAuthenticatedUser ,authorizeRoles} = require('../middleware/auth');
const { registerUser, loginUser, logout, forgetPassword, getUserDetails } = require('../controllers/userController');
const router = express.Router();
router.route('/me').get(isAuthenticatedUser,getUserDetails)
auth.js
const Errorhandler = require('../Utils/errorHandler')
const catchAsyncErrors = require('./catchAsyncErrors')
const User = require('../models/userSchema')
const jwt = require('jsonwebtoken')
exports.isAuthenticatedUser = catchAsyncErrors(async (req, res, next) => {
const { token } = req.cookies;
console.log(token)
if (!token) {
return next(new Errorhandler("Please Login to access this resource", 401));
}
const decodedData = jwt.verify(token, process.env.JWT_SECRET);
req.user = await User.findById(decodedData.id);
next();
});
My frontend Code -
app.js -
import React, { Fragment } from "react";
import store from './Store'
import { loadUser } from "./actions/userActions";
function App() {
React.useEffect(()=>{
store.dispatch(loadUser())
},[])
userAction.js -
export const loadUser = () => async (dispatch) => {
try {
dispatch({ type: LOAD_USER_REQUEST });
const { data } = await axios.get(`/api/v1/me`,{credentials: 'include'});
dispatch({ type: LOAD_USER_SUCCESS, payload: data.user });
} catch (error) {
dispatch({ type: LOAD_USER_FAIL, payload: error.response.data.message });
}
};
export const clearErrors = () => async (dispatch) => {
dispatch({ type: CLEAR_ERRORS });
};