Generate refresh token & add it to response

This commit is contained in:
Rushi Gandhi committed 2024-10-15 12:30:24 +05:30
1 parent c2e00375c1
commit 05c051ae3a
2 files changed
+24 -2

No files matched your search

+22 -2
View File
@@ -33,6 +33,24 @@ const issueToken = (payload, appSettings) => {
}
};
/**
* Creates and returns a JWT refresh token with an arbitrary payload
* @function
* @param {Object} payload - Here we have passed MongoDB assigned _id.
* @param {Object} appSettings
* @returns {String}
* @throws {Error}
*/
const issueRefreshToken = (payload, appSettings) => {
try {
const tokenTTL = appSettings.refreshTokenTTL ? appSettings.refreshTokenTTL : "7d";
return jwt.sign({ id: payload }, appSettings.refreshTokenSecret, { expiresIn: tokenTTL });
} catch (error) {
throw handleError(error, SERVICE_NAME, "issueRefreshToken");
}
};
/**
* Registers a new user. If the user is the first account, a JWT secret is created. If not, an invite token is required.
* @async
@@ -81,6 +99,7 @@ const registerUser = async (req, res, next) => {
const appSettings = await req.settingsService.getSettings();
const token = issueToken(userForToken, appSettings);
const refreshToken = issueRefreshToken(userForToken._id, appSettings);
req.emailService
.buildAndSendEmail(
@@ -99,7 +118,7 @@ const registerUser = async (req, res, next) => {
return res.status(200).json({
success: true,
msg: successMessages.AUTH_CREATE_USER,
data: { user: newUser, token: token },
data: { user: newUser, token: token, refreshToken: refreshToken },
});
} catch (error) {
console.log("ERROR", error);
@@ -147,13 +166,14 @@ const loginUser = async (req, res, next) => {
// Happy path, return token
const appSettings = await req.settingsService.getSettings();
const token = issueToken(userWithoutPassword, appSettings);
const refreshToken = issueRefreshToken(userWithoutPassword._id, appSettings);
// reset avatar image
userWithoutPassword.avatarImage = user.avatarImage;
return res.status(200).json({
success: true,
msg: successMessages.AUTH_LOGIN_USER,
data: { user: userWithoutPassword, token: token },
data: { user: userWithoutPassword, token: token, refreshToken: refreshToken },
});
} catch (error) {
next(handleError(error, SERVICE_NAME, "loginController"));
+2
View File
@@ -6,11 +6,13 @@ const envConfig = {
apiBaseUrl: undefined,
clientHost: process.env.CLIENT_HOST,
jwtSecret: process.env.JWT_SECRET,
refreshTokenSecret: process.env.REFRESH_TOKEN_SECRET,
dbType: process.env.DB_TYPE,
dbConnectionString: process.env.DB_CONNECTION_STRING,
redisHost: process.env.REDIS_HOST,
redisPort: process.env.REDIS_PORT,
jwtTTL: process.env.TOKEN_TTL,
refreshTokenTTL: process.env.REFRESH_TOKEN_TTL,
pagespeedApiKey: process.env.PAGESPEED_API_KEY,
systemEmailHost: process.env.SYSTEM_EMAIL_HOST,
systemEmailPort: process.env.SYSTEM_EMAIL_PORT,