@@ -2,6 +2,7 @@ const expressAsyncHandler = require("express-async-handler");
22const { sendSuccessResponse } = require ( "../../../utils/helpers" ) ;
33const { registerUserService, loginUserService, getCurrentUserService, refreshAccessTokenService } = require ( "../../../services/users/user-service" ) ;
44const { StatusCodes } = require ( "http-status-codes" ) ;
5+ const logger = require ( "../../../utils/logger" ) ;
56
67/**
78 * Handles an HTTP POST request to register a new user.
@@ -31,11 +32,16 @@ const registerUser = expressAsyncHandler(async (request, response) => {
3132 * Handles an HTTP POST request to authenticate and log in an existing user.
3233 */
3334const loginUser = expressAsyncHandler ( async ( request , response ) => {
34- // Extract email and password from the request body.
35- const userCredentials = request . body ;
36-
3735 // Generate tokens after authentication
38- const { userDB, accessToken } = await loginUserService ( userCredentials ) ;
36+ const { userDB, accessToken, refreshToken } = await loginUserService ( request . body ) ;
37+
38+ // Set the refresh token as an HTTP-only cookie for secure storage on the client side.
39+ response . cookie ( "refreshToken" , refreshToken , {
40+ httpOnly : true , // Prevents client-side JavaScript access to the cookie.
41+ secure : process . env . NODE_ENV === "production" , // Only send over HTTPS in production.
42+ sameSite : "strict" , // Protects against CSRF attacks.
43+ maxAge : 7 * 24 * 60 * 60 * 1000 // Cookie expiration in 7 days.
44+ } ) ;
3945
4046 sendSuccessResponse (
4147 response ,
@@ -93,6 +99,14 @@ const logoutUser = expressAsyncHandler(async (request, response) => {
9399 // Invalidate the user's refresh token
94100 await loginUserService ( request . cookies . refreshToken ) ;
95101
102+ // Clear the 'refreshToken' cookie from the client's browser.
103+ // The options must match those used when setting the cookie during login.
104+ response . clearCookie ( "refreshToken" , {
105+ httpOnly : true , // Must match the `httpOnly` setting used when the cookie was set.
106+ secure : process . env . NODE_ENV === "production" , // Must match `secure` setting.
107+ sameSite : "Strict" // Must match `sameSite` setting.
108+ } ) ;
109+
96110 sendSuccessResponse (
97111 response ,
98112 StatusCodes . OK ,
0 commit comments