@@ -68,17 +68,24 @@ router.get('/:id', async (req, res) => {
6868
6969// Create a new user
7070router . post ( '/' , async ( req , res ) => {
71- const data = new User ( {
72- username : req . body . username ,
73- email : req . body . email ,
74- password : req . body . password
75- } )
7671 try {
77- const dataToSave = await data . save ( ) ;
78- res . status ( 200 ) . json ( dataToSave . cleanup ( ) )
79- }
80- catch ( error ) {
81- res . status ( 400 ) . json ( { message : error . message } )
72+ const verify = jwt . verify ( req . headers . authorization . split ( ' ' ) [ 1 ] , JWT_SECRET ) ;
73+ if ( verify ) {
74+ res . status ( 404 ) . json ( { message : "You cannot create a user while logged in" } ) ;
75+ }
76+ } catch {
77+ const data = new User ( {
78+ username : req . body . username ,
79+ email : req . body . email ,
80+ password : req . body . password
81+ } )
82+ try {
83+ const dataToSave = await data . save ( ) ;
84+ res . status ( 200 ) . json ( dataToSave . cleanup ( ) )
85+ }
86+ catch ( error ) {
87+ res . status ( 400 ) . json ( { message : error . message } )
88+ }
8289 }
8390} )
8491
@@ -210,28 +217,35 @@ router.delete('/:id', async (req, res) => {
210217
211218// Log in user and return user data
212219router . post ( '/login' , async ( req , res ) => {
213- if ( ! req . body . username || ! req . body . password ) {
214- return res . status ( 400 ) . json ( { error : 'Username and password are required' } ) ;
215- } else {
216- try {
217- const user = await User . findOne ( { username : req . body . username } ) ;
218- if ( user ) {
219- const validPassword = await bcrypt . compare ( req . body . password , user . password ) ;
220- if ( validPassword ) {
221- const payload = user . cleanup ( ) ;
222- const accessToken = generateAccessToken ( payload , JWT_SECRET ) ;
223- res . status ( 200 ) . send ( {
224- message : "User authenticated" ,
225- accessToken,
226- } ) ;
220+ try {
221+ const verify = jwt . verify ( req . headers . authorization . split ( ' ' ) [ 1 ] , JWT_SECRET ) ;
222+ if ( verify ) {
223+ res . status ( 404 ) . json ( { message : "You cannot login a different user while logged in" } ) ;
224+ }
225+ } catch {
226+ if ( ! req . body . username || ! req . body . password ) {
227+ return res . status ( 400 ) . json ( { error : 'Username and password are required' } ) ;
228+ } else {
229+ try {
230+ const user = await User . findOne ( { username : req . body . username } ) ;
231+ if ( user ) {
232+ const validPassword = await bcrypt . compare ( req . body . password , user . password ) ;
233+ if ( validPassword ) {
234+ const payload = user . cleanup ( ) ;
235+ const accessToken = generateAccessToken ( payload , JWT_SECRET ) ;
236+ res . status ( 200 ) . send ( {
237+ message : "User authenticated" ,
238+ accessToken,
239+ } ) ;
240+ } else {
241+ res . status ( 400 ) . json ( { message : 'Invalid password' } ) ;
242+ }
227243 } else {
228- res . status ( 400 ) . json ( { message : 'Invalid password ' } ) ;
244+ res . status ( 400 ) . json ( { message : 'User not found ' } ) ;
229245 }
230- } else {
231- res . status ( 400 ) . json ( { message : 'User not found ' } ) ;
246+ } catch ( err ) {
247+ res . status ( 400 ) . json ( { message : 'Cannot login user right now, try again later ' } ) ;
232248 }
233- } catch ( err ) {
234- res . status ( 400 ) . json ( { message : 'Cannot login user right now, try again later' } ) ;
235249 }
236250 }
237251} ) ;
0 commit comments