Skip to content

Commit 323f1b5

Browse files
committed
callback error handled
1 parent a57cc15 commit 323f1b5

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

server/controllers/authController.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -191,22 +191,12 @@ export const loginUser = async (req, res) => {
191191
};
192192

193193
export const googleAuthCallback = (req, res) => {
194-
if (!req.user) {
195-
// Redirect to register page with error message
196-
return res.redirect(`${process.env.CLIENT_URL}/register?error=no_account&message=No account found with this Google email. Please register first.`);
197-
}
198-
199194
const { user, token } = req.user;
200195
setAuthCookies(res, user, token);
201196
res.redirect(`${process.env.CLIENT_URL}/challenges`);
202197
};
203198

204199
export const githubAuthCallback = (req, res) => {
205-
if (!req.user) {
206-
// Redirect to register page with error message
207-
return res.redirect(`${process.env.CLIENT_URL}/register?error=no_account&message=No account found with this GitHub email. Please register first.`);
208-
}
209-
210200
const { user, token } = req.user;
211201
setAuthCookies(res, user, token);
212202
res.redirect(`${process.env.CLIENT_URL}/challenges`);

server/middleware/auth.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import jwt from "jsonwebtoken";
22
import { User } from "../models/User.js";
3+
import passport from "../config/passport.js";
34

45
export const protect = async (req, res, next) => {
56
let token;
@@ -37,3 +38,38 @@ export const protect = async (req, res, next) => {
3738
return res.status(401).json({ message: 'Not authorized, invalid token' });
3839
}
3940
};
41+
42+
// OAuth callback middlewares
43+
export const handleGoogleCallback = (req, res, next) => {
44+
passport.authenticate("google", { session: false }, (err, user, info) => {
45+
if (err) {
46+
console.error("Google auth error:", err);
47+
return res.redirect(`${process.env.CLIENT_URL}/register?error=auth_error&message=Authentication error. Please try again.`);
48+
}
49+
50+
if (!user) {
51+
const message = info?.message || "No account found with this Google email. Please register first.";
52+
return res.redirect(`${process.env.CLIENT_URL}/register?error=no_account&message=${encodeURIComponent(message)}`);
53+
}
54+
55+
req.user = user;
56+
next();
57+
})(req, res, next);
58+
};
59+
60+
export const handleGithubCallback = (req, res, next) => {
61+
passport.authenticate("github", { session: false }, (err, user, info) => {
62+
if (err) {
63+
console.error("GitHub auth error:", err);
64+
return res.redirect(`${process.env.CLIENT_URL}/register?error=auth_error&message=Authentication error. Please try again.`);
65+
}
66+
67+
if (!user) {
68+
const message = info?.message || "No account found with this GitHub email. Please register first.";
69+
return res.redirect(`${process.env.CLIENT_URL}/register?error=no_account&message=${encodeURIComponent(message)}`);
70+
}
71+
72+
req.user = user;
73+
next();
74+
})(req, res, next);
75+
};

server/routes/authRoutes.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { registerUser, loginUser, verifyEmail, logoutUser, googleAuthCallback, g
33
const router = express.Router();
44
import passport from "../config/passport.js";
55
import { verifyProfiles } from "../controllers/verifyProfiles.js";
6-
import { protect } from "../middleware/auth.js";
6+
import { protect, handleGoogleCallback, handleGithubCallback } from "../middleware/auth.js";
77

88
router.post('/register', registerUser);
99
router.post('/verify', verifyEmail);
@@ -12,8 +12,8 @@ router.post('/login', loginUser);
1212
router.get("/google",passport.authenticate("google", { scope: ["profile", "email"], session: false}));
1313
router.get("/github", passport.authenticate("github", { scope: ["user:email"], session: false}));
1414

15-
router.get("/google/callback", passport.authenticate("google", { session: false }), googleAuthCallback);
16-
router.get("/github/callback", passport.authenticate("github", { session: false }), githubAuthCallback);
15+
router.get("/google/callback", handleGoogleCallback, googleAuthCallback);
16+
router.get("/github/callback", handleGithubCallback, githubAuthCallback);
1717

1818
router.post("/logout", logoutUser);
1919
router.post("/forgot-password", forgotPassword);

0 commit comments

Comments
 (0)