diff --git a/server/config/passport.js b/server/config/passport.js
new file mode 100644
index 0000000..e50b0ce
--- /dev/null
+++ b/server/config/passport.js
@@ -0,0 +1,40 @@
+const passport = require('passport');
+const GoogleStrategy = require('passport-google-oauth20').Strategy;
+const User = require('../models/studentLoginInfo');
+const Canteen = require('../models/canteenLoginInfo');
+
+passport.use(new GoogleStrategy({
+ clientID: process.env.GOOGLE_CLIENT_ID,
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
+ callbackURL: '/auth/google/callback'
+},
+async (accessToken, refreshToken, profile, done) => {
+ try {
+ let user = await User.findOne({ googleId: profile.id });
+ if (!user) {
+ user = await User.create({
+ googleId: profile.id,
+ name: profile.displayName,
+ email: profile.emails[0].value,
+ });
+ }
+ return done(null, user);
+ } catch (error) {
+ return done(error, null);
+ }
+}));
+
+passport.serializeUser((user, done) => {
+ done(null, user.id);
+});
+
+passport.deserializeUser(async (id, done) => {
+ try {
+ const user = await User.findById(id);
+ done(null, user);
+ } catch (error) {
+ done(error, null);
+ }
+});
+
+module.exports = passport;
diff --git a/server/controllers/Auth.js b/server/controllers/Auth.js
index 124011e..ec26468 100644
--- a/server/controllers/Auth.js
+++ b/server/controllers/Auth.js
@@ -18,8 +18,7 @@ exports.studentSignup = async (req, res) => {
console.log("This is jwt", process.env.JWT_SECRET);
try {
console.log(req.body);
- const { name, email, collegeName, accountType, password, confirmPassword } =
- await req.body;
+ const { name, email, collegeName, accountType, password, confirmPassword } = req.body;
if (password !== confirmPassword) {
return res.status(400).json({
@@ -28,14 +27,12 @@ exports.studentSignup = async (req, res) => {
});
}
- const existingUser = await User.findOne({
- email,
- });
+ const existingUser = await User.findOne({ email });
if (existingUser) {
return res.status(400).json({
success: false,
- message: "User alredy exist",
+ message: "User already exists",
});
}
@@ -59,17 +56,42 @@ exports.studentSignup = async (req, res) => {
password: hashedPassword,
});
- await user.save();
+ const payload = {
+ email: user.email,
+ id: user._id,
+ accountType: user.accountType,
+ };
+
+ let token = jwt.sign(payload, process.env.JWT_SECRET, {
+ expiresIn: "2h",
+ });
+
+ // creating a session
+ const session = new Session({
+ userId: user._id,
+ token,
+ });
+ await session.save();
+
+ user.password = undefined;
+
+ res.cookie("token", token, {
+ httpOnly: true,
+ secure: true,
+ maxAge: 3600000,
+ });
return res.status(200).json({
success: true,
- message: "User created succesfully",
+ message: "User created successfully",
+ token,
+ user,
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
- message: "USer can not be registred",
+ message: "User cannot be registered",
});
}
};
diff --git a/src/App.js b/src/App.js
index 87fc149..7d628c2 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,6 +1,6 @@
import React from 'react';
import './App.css';
-import { Route, Routes } from 'react-router-dom';
+import { Route, Routes, Navigate } from 'react-router-dom';
import Home from './pages/Home';
import Login from './pages/Login';
import Signup from './pages/Signup';
@@ -14,13 +14,9 @@ import Loader from './components/Loader/Loader';
import ForgotPassword from './pages/ForgotPassword';
import ResetPassword from './pages/ResetPassword';
import { ThemeProvider } from './themeContext';
-
import ContactUs from './pages/ContactUs';
-
-import { AuthProvider } from './authContext'
import EditProfile from './pages/EditProfile';
-
const Layout = ({ children }) => {
return (
@@ -30,32 +26,78 @@ const Layout = ({ children }) => {
};
function App() {
+ const usertoken = localStorage.getItem('usertoken');
+ const token = localStorage.getItem('token');
+ const canteenId = localStorage.getItem('canteenId');
+ const hasAnyToken = token || usertoken;
+
+ // Check if either token is undefined and redirect to login if true
+ if (usertoken === undefined || token === undefined) {
+ localStorage.removeItem('usertoken');
+ localStorage.removeItem('token');
+ window.location.href = "/login"; // Redirect to login page
+ return null; // Render nothing else
+ }
+
return (
-
} />
- } />
+ } />
+ } />
} />
} />
} />
- } />
- } />
+ {token ? (
+ } />
+ ) : (
+ } />
+ )}
+
+ {token ? (
+ } />
+ ) : (
+ } />
+ )}
+
+ {usertoken ? (
+ } />
+ ) : (
+ } />
+ )}
+
+ {usertoken ? (
+ } />
+ ) : (
+ } />
+ )}
+
+ {hasAnyToken ? (
+ } />
+ ) : (
+ : } />
+ )}
+
+ {hasAnyToken ? (
+ } />
+ ) : (
+ : } />
+ )}
+
+ {hasAnyToken ? (
+ } />
+ ) : (
+ : } />
+ )}
- } />
- } />
- } />
- } />
- } />
} />
- } />
+
} />
-
);
}
diff --git a/src/components/Modal.js b/src/components/Modal.js
new file mode 100644
index 0000000..6602334
--- /dev/null
+++ b/src/components/Modal.js
@@ -0,0 +1,24 @@
+// Modal.js
+import React from 'react';
+
+const Modal = ({ show, onClose, children }) => {
+ if (!show) {
+ return null;
+ }
+
+ return (
+
+
+
+ {children}
+
+
+ );
+};
+
+export default Modal;
diff --git a/src/pages/About.jsx b/src/pages/About.jsx
index d7d3478..01948b4 100644
--- a/src/pages/About.jsx
+++ b/src/pages/About.jsx
@@ -11,7 +11,7 @@ import { useNavigate } from "react-router-dom";
const About = () => {
const navigate = useNavigate()
- const { isAuthenticated } = localStorage.getItem('token');
+ // const { isAuthenticated } = localStorage.getItem('token');
const [loading,setLoading] = useState(false);
useEffect(() => {
diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx
index e501bf5..81a7c11 100644
--- a/src/pages/Login.jsx
+++ b/src/pages/Login.jsx
@@ -56,12 +56,11 @@ function Login() {
async function submitHandler(event) {
event.preventDefault();
- // const apiUrl =
- // formData.accountType === "User"
- // ? `${process.env.REACT_APP_BASE_URL}/studentLogin`
- // : `${process.env.REACT_APP_BASE_URL}/canteenLogin`;
+ const apiUrl =
+ formData.accountType === "User"
+ ? `${process.env.REACT_APP_BASE_URL}/studentLogin`
+ : `${process.env.REACT_APP_BASE_URL}/canteenLogin`;
- const apiUrl = 'http://localhost:8000/api/v1/studentLogin'
try {
const response = await axios.post(apiUrl, formData);
@@ -75,14 +74,16 @@ function Login() {
}
if (formData.accountType === "User") {
-
- navigate("/home");
- localStorage.setItem("token", response.data.token);
+ localStorage.setItem("usertoken", response.data.token)
+ window.location.href='/home'
+
+
+
} else {
localStorage.setItem("canteenId", response.data.cantId);
localStorage.setItem("token", response.data.token);
- navigate(`/section/${response.data.cantId}`);
+ window.location.href=`/section/${response.data.cantId}`;
}
diff --git a/src/pages/News.jsx b/src/pages/News.jsx
index 8399b3b..93fe3c8 100644
--- a/src/pages/News.jsx
+++ b/src/pages/News.jsx
@@ -12,11 +12,7 @@ function News() {
const [articles, setArticles] = useState([]);
const [loading, setLoading] = useState(false);
- useEffect(() => {
- if(!isAuthenticated){
- navigate('/')
- }
- }, [])
+
const fetchNews = async (query) => {
try {
diff --git a/src/pages/Signup.jsx b/src/pages/Signup.jsx
index c2ace93..527b9b3 100644
--- a/src/pages/Signup.jsx
+++ b/src/pages/Signup.jsx
@@ -73,12 +73,14 @@ function Signup() {
toast.success("Account Created Successfully!");
if (formData.accountType === "User") {
- navigate("/");
- } else {
- const token = response.data.token;
- localStorage.setItem("token", token);
- localStorage.setItem("canteenId", response.data.cantId);
- navigate(`/section/${response.data.cantId}`);
+ localStorage.setItem("usertoken", response.data.token);
+ window.location.href="/home";
+ }
+ if (formData.accountType === "Canteen") {
+ localStorage.setItem("userId", response.data.user);
+ localStorage.setItem("token", response.data.token);
+ window.location.href=`/section/${response.data.cantId}`;
+
}
} catch (error) {
const errorMessage = error.response?.data?.message || "Failed to create account. Please try again.";