Skip to content

Commit ca75285

Browse files
Update auth.controller.js
1 parent 1520e89 commit ca75285

1 file changed

Lines changed: 66 additions & 59 deletions

File tree

src/controllers/auth.controller.js

Lines changed: 66 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -124,86 +124,93 @@ export const refreshToken = async (req, res) => {
124124
}
125125
};
126126

127-
export const login = (req,res,next)=>{
128-
passport.authenticate('local',{session: false}, async(err,user,info)=>{
129-
if(err){
130-
return res.status(500).json({message: info?.message || "Server side error"});
131-
}
132-
if(!user && info?.message === "Invalid credentials"){
133-
return res.status(401).json({message: info?.message});
134-
}
135-
else if(!user){
136-
return res.status(404).json({message: info?.message || "User not found"});
127+
export const login = (req, res, next) => {
128+
passport.authenticate('local', { session: false }, async (err, user, info) => {
129+
try {
130+
if (err) {
131+
console.error('Passport local error:', err);
132+
return res.status(500).json({ message: 'Authentication error' });
133+
}
134+
135+
if (!user && info?.message === 'Invalid credentials') {
136+
return res.status(401).json({ message: info?.message });
137+
} else if (!user) {
138+
return res.status(404).json({ message: info?.message || 'User not found' });
139+
}
140+
141+
// fetch fresh user doc to get latest tokenVersion / public fields
142+
const userDetails = await User.findById(user._id);
143+
if (!userDetails) {
144+
return res.status(404).json({ message: 'User not found' });
145+
}
146+
147+
const token = generateToken(userDetails);
148+
149+
// prefer model helper toPublic if available, otherwise expose safe fields
150+
const publicUser = typeof userDetails.toPublic === 'function'
151+
? userDetails.toPublic(false)
152+
: {
153+
email: userDetails.email,
154+
firstName: userDetails.firstName,
155+
lastName: userDetails.lastName,
156+
};
157+
158+
return res.status(200).json({
159+
message: info?.message || 'Login successful',
160+
user: publicUser,
161+
token
162+
});
163+
} catch (e) {
164+
console.error('Login handler error:', e);
165+
return res.status(500).json({ message: 'Server error during login' });
137166
}
167+
})(req, res, next);
168+
};
138169

139-
const userDetails = await User.findById(user._id);
140-
const {email, firstName, lastName} = userDetails;
141-
const token = generateToken(userDetails);
142-
143-
return res.status(200).json({
144-
message:info?.message,
145-
userDetails: {
146-
email,
147-
firstName,
148-
lastName
149-
},
150-
token: token
151-
});
152-
})(req,res,next);
153-
}
154-
155-
export const signUp = async(req,res,next)=>{
156-
const {email, name, firstName, lastName, password, authProvider} =req.body;
157-
if(!email || !name || !firstName ||!lastName || !password){
158-
res.statusCode = 400;
159-
next(new Error("Required Details are missing"));
170+
export const signUp = async (req, res, next) => {
171+
const { email, name, firstName, lastName, password, authProvider } = req.body;
172+
if (!email || !name || !firstName || !lastName || !password) {
173+
return next(new Error('Required details are missing'));
160174
}
161175

162-
try{
163-
176+
try {
164177
const user = await User.findOne({
165-
$or: [{email},{name}]
178+
$or: [{ email }, { name }]
166179
});
167180

168-
if(user){
169-
res.statusCode = 400;
170-
throw new Error("User with email or name already exists");
181+
if (user) {
182+
return res.status(400).json({ message: 'User with email or name already exists' });
171183
}
172-
173-
// Whitelist only allowed fields to prevent mass assignment
184+
174185
const allowedFields = {
175186
email,
176187
name,
177188
firstName,
178189
lastName,
179190
password,
180-
authProvider: authProvider || 'local' // default to 'local' if not provided
191+
authProvider: authProvider || 'local'
181192
};
182-
183-
await User.create(allowedFields);
184-
res.status(201).json({
185-
message: "User signed up successfully",
186-
userDetail: {
187-
userName: name,
188-
email: email,
189-
firstName: firstName,
190-
lastName: lastName
191-
}
192-
});
193193

194-
}catch(err){
194+
const created = await User.create(allowedFields);
195195

196-
if(err.name === "ValidationError"){
196+
const publicUser = typeof created.toPublic === 'function'
197+
? created.toPublic(false)
198+
: { email: created.email, firstName: created.firstName, lastName: created.lastName };
199+
200+
return res.status(201).json({
201+
message: 'User signed up successfully',
202+
user: publicUser
203+
});
204+
} catch (err) {
205+
console.error('Signup error:', err);
206+
if (err.name === 'ValidationError') {
197207
const errors = Object.values(err.errors).map(e => e.message);
198208
return res.status(400).json({
199209
name: err.name,
200-
message: "Validation Failed",
210+
message: 'Validation Failed',
201211
errors
202212
});
203213
}
204-
205-
res.status(500).json({
206-
error: err.message,
207-
message: "Internal server error during signup"});
214+
return res.status(500).json({ message: 'Internal server error during signup' });
208215
}
209-
}
216+
};

0 commit comments

Comments
 (0)