Added login and refresh token routes
This commit is contained in:
parent
48276d7161
commit
adce955f69
|
|
@ -86,7 +86,8 @@ async function va_register(req, res) {
|
||||||
// Login VA
|
// Login VA
|
||||||
async function va_login_callback(req, res) {
|
async function va_login_callback(req, res) {
|
||||||
try {
|
try {
|
||||||
const payload = req.body ? JSON.parse(req.body) : {};
|
// const payload = req.body ? JSON.parse(req.body) : {};
|
||||||
|
const payload = req.body || {};
|
||||||
const { userDetails } = payload;
|
const { userDetails } = payload;
|
||||||
|
|
||||||
if (!userDetails || !userDetails.email || !userDetails.password) {
|
if (!userDetails || !userDetails.email || !userDetails.password) {
|
||||||
|
|
@ -112,32 +113,97 @@ async function va_login_callback(req, res) {
|
||||||
return res.status(401).json({ success: false, message: "Invalid password" });
|
return res.status(401).json({ success: false, message: "Invalid password" });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate JWT token with 24h expiry
|
// Generate JWT accessToken with 24h expiry
|
||||||
const token = jwt.sign(
|
const accessToken = jwt.sign(
|
||||||
{
|
{
|
||||||
id: user._id,
|
id: user._id,
|
||||||
email: user.userDetails.email,
|
email: user.userDetails.email,
|
||||||
name: user.userDetails.firstName,
|
name: user.userDetails.firstName,
|
||||||
},
|
},
|
||||||
process.env.JWT_SECRET, // e.g. "mySuperSecretKey"
|
process.env.JWT_SECRET_ACCESS_TOKEN || "DocTrackerSecretKey",
|
||||||
{ expiresIn: "24h" }
|
{ expiresIn: "24h" }
|
||||||
);
|
);
|
||||||
|
|
||||||
// Return token and user info
|
// Generate JWT refreshToken with 24h expiry
|
||||||
|
const refreshToken = jwt.sign(
|
||||||
|
{
|
||||||
|
id: user._id,
|
||||||
|
email: user.userDetails.email,
|
||||||
|
name: user.userDetails.firstName,
|
||||||
|
},
|
||||||
|
process.env.JWT_SECRET_REFRESH_TOKEN || "DocTrackerSecretKeyRefreshToken",
|
||||||
|
{ expiresIn: "30d" }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Return accessToken and user info
|
||||||
return res.status(200).json({
|
return res.status(200).json({
|
||||||
success: true,
|
success: true,
|
||||||
message: "Login successful",
|
message: "Login successful",
|
||||||
token,
|
accessToken,
|
||||||
|
refreshToken,
|
||||||
user: {
|
user: {
|
||||||
id: user._id,
|
id: user._id,
|
||||||
name: user.userDetails.firstName,
|
name: user.userDetails.firstName,
|
||||||
email: user.userDetails.email,
|
email: user.userDetails.email,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("va_register error:", error);
|
||||||
|
return res.status(500).json({ success: false, message: "Internal Server Error" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh Token VA
|
||||||
|
async function va_refresh_token_callback(req, res) {
|
||||||
|
try {
|
||||||
|
const { refreshToken } = req.body || {};
|
||||||
|
|
||||||
|
if (!refreshToken) {
|
||||||
|
return res.status(400).json({
|
||||||
|
success: false,
|
||||||
|
message: "Refresh token missing",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return res.status(201).json({ success: true, data: 'created' });
|
// 🔍 Verify refresh token
|
||||||
|
jwt.verify(
|
||||||
|
refreshToken,
|
||||||
|
process.env.JWT_SECRET_REFRESH_TOKEN || "DocTrackerSecretKeyRefreshToken",
|
||||||
|
async (err, decoded) => {
|
||||||
|
if (err) {
|
||||||
|
return res.status(403).json({
|
||||||
|
success: false,
|
||||||
|
message: "Invalid or expired refresh token",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if user still exists
|
||||||
|
const user = await VAModel.findById(decoded.id);
|
||||||
|
if (!user) {
|
||||||
|
return res.status(404).json({
|
||||||
|
success: false,
|
||||||
|
message: "User no longer exists",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a new access token
|
||||||
|
const newAccessToken = jwt.sign(
|
||||||
|
{
|
||||||
|
id: user._id,
|
||||||
|
email: user.userDetails.email,
|
||||||
|
name: user.userDetails.firstName,
|
||||||
|
},
|
||||||
|
process.env.JWT_SECRET_ACCESS_TOKEN || "DocTrackerAccessKey",
|
||||||
|
{ expiresIn: "24h" }
|
||||||
|
);
|
||||||
|
|
||||||
|
return res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
message: "New access token generated",
|
||||||
|
accessToken: newAccessToken,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("va_register error:", error);
|
console.error("va_register error:", error);
|
||||||
return res.status(500).json({ success: false, message: "Internal Server Error" });
|
return res.status(500).json({ success: false, message: "Internal Server Error" });
|
||||||
|
|
@ -420,5 +486,6 @@ export {
|
||||||
va_filter_search,
|
va_filter_search,
|
||||||
va_register,
|
va_register,
|
||||||
va_projects_callback,
|
va_projects_callback,
|
||||||
va_login_callback
|
va_login_callback,
|
||||||
|
va_refresh_token_callback
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
import express from "express";
|
import express from "express";
|
||||||
const vaRoutes = express.Router();
|
const vaRoutes = express.Router();
|
||||||
|
|
||||||
import { va_callback, va_username_callback, va_clients_callback, va_clients_projects_callback, va_log_callback, va_project_log_callback, va_filter_search, va_projects_callback, va_register, va_login_callback } from "../../controllers/va.controller.js";
|
import { va_callback, va_username_callback, va_clients_callback, va_clients_projects_callback, va_log_callback, va_project_log_callback, va_filter_search, va_projects_callback, va_register, va_login_callback, va_refresh_token_callback } from "../../controllers/va.controller.js";
|
||||||
|
|
||||||
vaRoutes.get("/", va_callback); // VA Callback for getting active VA
|
vaRoutes.get("/", va_callback); // VA Callback for getting active VA
|
||||||
|
|
||||||
vaRoutes.get("/login", va_login_callback); // VA Callback for login VA
|
vaRoutes.post("/login", va_login_callback); // VA Callback for login VA
|
||||||
|
|
||||||
|
vaRoutes.post("/refreshToken", va_refresh_token_callback); // VA Callback for refresh token
|
||||||
|
|
||||||
vaRoutes.post("/register", va_register); // Register a new VA
|
vaRoutes.post("/register", va_register); // Register a new VA
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue