0

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 });
};

0 Answers0