diff --git a/Client/src/Features/Auth/authSlice.js b/Client/src/Features/Auth/authSlice.js index ef41c1b46..5358d7f4d 100644 --- a/Client/src/Features/Auth/authSlice.js +++ b/Client/src/Features/Auth/authSlice.js @@ -67,10 +67,8 @@ const handleAuthFulfilled = (state, action) => { state.isLoading = false; state.success = action.payload.success; state.msg = action.payload.msg; - state.authToken = action.payload.data; - const decodedToken = jwtDecode(action.payload.data); - const user = { ...decodedToken }; - state.user = user; + state.authToken = action.payload.data.token; + state.user = action.payload.data.user; }; const handleAuthRejected = (state, action) => { state.isLoading = false; diff --git a/Client/src/Pages/Register/index.jsx b/Client/src/Pages/Register/index.jsx index 4aaf5afc8..1760a5be2 100644 --- a/Client/src/Pages/Register/index.jsx +++ b/Client/src/Pages/Register/index.jsx @@ -37,6 +37,7 @@ const Register = () => { lastname: "", email: "", password: "", + role: "", }); useEffect(() => { @@ -50,7 +51,7 @@ const Register = () => { .catch((error) => { console.log(error); }); - }, [navigate]); + }, [form, navigate]); useEffect(() => { const { error } = registerValidation.validate(form, { @@ -76,8 +77,9 @@ const Register = () => { const handleSubmit = async (e) => { e.preventDefault(); try { - await registerValidation.validateAsync(form, { abortEarly: false }); - const action = await dispatch(register(form)); + const adminForm = { ...form, role: "admin" }; + await registerValidation.validateAsync(adminForm, { abortEarly: false }); + const action = await dispatch(register(adminForm)); if (action.meta.requestStatus === "fulfilled") { const token = action.payload.data; diff --git a/Client/src/Validation/validation.js b/Client/src/Validation/validation.js index 00903fdb7..6284ea49d 100644 --- a/Client/src/Validation/validation.js +++ b/Client/src/Validation/validation.js @@ -22,6 +22,9 @@ const registerValidation = joi.object({ "string.min": "Password must be at least 8 characters", "string.empty": "Password is required", }), + role: joi.string().required().messages({ + "string.empty": "Role is required", + }), }); const loginValidation = joi.object({ diff --git a/Client/src/store.js b/Client/src/store.js index 54201761e..ebb6a325b 100644 --- a/Client/src/store.js +++ b/Client/src/store.js @@ -2,12 +2,24 @@ import { configureStore, combineReducers } from "@reduxjs/toolkit"; import monitorsReducer from "./Features/Monitors/monitorsSlice"; import authReducer from "./Features/Auth/authSlice"; import storage from "redux-persist/lib/storage"; -import { persistReducer, persistStore } from "redux-persist"; +import { persistReducer, persistStore, createTransform } from "redux-persist"; + +const authTransform = createTransform( + (inboundState) => { + const { profileImage, ...rest } = inboundState; + return rest; + }, + // No transformation on rehydration + null, + // Only applies to auth + { whitelist: ["auth"] } +); const persistConfig = { key: "root", storage, whitielist: ["auth", "monitors"], + transforms: [authTransform], }; const rootReducer = combineReducers({ diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index bbf676e8a..0e05853b6 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -55,7 +55,11 @@ const registerController = async (req, res, next) => { service: SERVICE_NAME, userId: newUser._id, }); - const token = issueToken(newUser._doc); + + const userForToken = { ...newUser._doc }; + delete userForToken.profileImage; + + const token = issueToken(userForToken); // Sending email to user with pre defined template const template = registerTemplate("https://www.bluewavelabs.ca"); @@ -69,7 +73,7 @@ const registerController = async (req, res, next) => { return res.status(200).json({ success: true, msg: successMessages.AUTH_CREATE_USER, - data: token, + data: { user: newUser, token: token }, }); } catch (error) { error.service = SERVICE_NAME; @@ -108,7 +112,7 @@ const loginController = async (req, res, next) => { return res.status(200).json({ success: true, msg: successMessages.AUTH_LOGIN_USER, - data: token, + data: { user: userWithoutPassword, token: token }, }); } catch (error) { error.status = 500;