1- import { registerUserService , loginUserService , refreshTokenService , logoutService } from '../services/authService.js' ;
1+ import { User } from '../models/user.model.js' ;
2+ import { registerUserService , loginUserService } from '../services/authService.js' ;
3+ import jwt from 'jsonwebtoken'
4+ import { sendEmail } from '../utils/sendEmail.js' ;
25
36export const registerUser = async ( req , res ) => {
47 try {
@@ -17,6 +20,7 @@ export const registerUser = async (req, res) => {
1720export const loginUser = async ( req , res ) => {
1821 try {
1922 const { email, password } = req . body ;
23+
2024 const result = await loginUserService ( { email, password } ) ;
2125
2226 return res . status ( 200 ) . json ( {
@@ -33,42 +37,98 @@ export const loginUser = async (req, res) => {
3337 }
3438} ;
3539
36- export const refreshToken = async ( req , res ) => {
40+ export const forgotPassword = async ( req , res ) => {
41+ const { email } = req . body ;
42+
3743 try {
38- const { refreshToken } = req . body ;
39- const result = await refreshTokenService ( refreshToken ) ;
44+ const user = await User . findOne ( { email } ) ;
45+
46+ if ( ! user ) {
47+ return res . status ( 401 ) . json ( {
48+ success : false ,
49+ message : "User not found"
50+ } )
51+ }
52+
53+ const resetToken = jwt . sign (
54+ { id : user . _id } ,
55+ process . env . JWT_SECRET ,
56+ {
57+ expiresIn : '1h'
58+ }
59+ ) ;
60+
61+
62+ user . refreshToken = resetToken ;
63+ await user . save ( ) ;
64+
65+ const resetUrl = `http://localhost:5000/api/auth/resetPassword/${ resetToken } `
66+
67+ const html = `
68+ <p>Hello ${ user . fullname } ,</p>
69+ <p>You requested a password reset. Click below to reset your password:</p>
70+ <a href="${ resetUrl } " target="_blank">${ resetUrl } </a>
71+ <p>This link will expire in <b>1 hour</b>.</p>
72+
73+ `
4074
75+ await sendEmail ( user . email , html ) ;
76+
77+ console . log ( resetUrl ) ;
4178 return res . status ( 200 ) . json ( {
4279 success : true ,
43- message : 'Token refreshed successfully' ,
44- accessToken : result . accessToken ,
45- user : result . user ,
46- } ) ;
80+ message : 'Password reset link sent'
81+ } )
4782 } catch ( error ) {
48- console . error ( 'Error in refreshToken:' , error ) ;
49- const status = error . statusCode || 401 ;
50- return res . status ( status ) . json ( {
51- success : false ,
52- message : error . message || 'Token refresh failed'
53- } ) ;
83+ console . error ( error )
84+ return res . status ( 500 ) . json ( {
85+ success : false ,
86+ message : 'server error'
87+ } )
88+
5489 }
55- } ;
90+ }
5691
57- export const logout = async ( req , res ) => {
92+
93+ export const resetPassword = async ( req , res ) => {
5894 try {
59- const { refreshToken } = req . body ;
60- const result = await logoutService ( refreshToken ) ;
95+ const { token } = req . params ;
96+ const { password } = req . body ;
6197
62- return res . status ( 200 ) . json ( {
63- success : true ,
64- message : result . message ,
65- } ) ;
98+ if ( ! password ) {
99+ return res . status ( 400 ) . json ( {
100+ success : false ,
101+ message : 'Password is required'
102+ } )
103+ }
104+
105+ let decoded ;
106+ try {
107+ decoded = jwt . verify ( token , process . env . JWT_SECRET )
108+ } catch ( error ) {
109+
110+ return res . status ( 400 ) . json ( {
111+ success : false ,
112+ message : 'Invalid or expired token'
113+ } )
114+ }
115+
116+
117+
118+ const user = await User . findById ( decoded . id ) ;
119+ console . log ( user )
120+ if ( ! user || user . refreshToken !== token ) {
121+ return res . status ( 400 ) . json ( { success : false , message : 'Invalid or expired token' } ) ;
122+ }
123+ user . password = password ;
124+
125+
126+ user . refreshToken = undefined ;
127+ await user . save ( ) ;
128+ return res . status ( 200 ) . json ( { success : true , message : 'Password reset successful' } ) ;
66129 } catch ( error ) {
67- console . error ( 'Error in logout:' , error ) ;
68- const status = error . statusCode || 400 ;
69- return res . status ( status ) . json ( {
70- success : false ,
71- message : error . message || 'Logout failed'
72- } ) ;
130+
131+ return res . status ( 500 ) . json ( { success : false , message : 'Server error' } ) ;
132+
73133 }
74- } ;
134+ }
0 commit comments