@@ -16,13 +16,16 @@ import { User } from '../models/users';
1616import { AuthEventService } from '../services/authEventService' ;
1717import { sendMagicLinkEmail } from '../services/messagingService' ;
1818import { AuthenticatedRequest } from '../types/types' ;
19+ import getLogger from '../utils/logger' ;
1920import {
2021 computeSessionTimes ,
2122 hashDeviceFingerprint ,
2223 hashSha256 ,
2324 parseDurationToSeconds ,
2425} from '../utils/utils' ;
2526
27+ const logger = getLogger ( 'magic-links' ) ;
28+
2629const TTL_MINUTES = 15 ;
2730const AUTH_MODE : 'web' | 'server' = process . env . AUTH_MODE ! as 'web' | 'server' ;
2831
@@ -79,6 +82,7 @@ export async function requestMagicLink(req: Request, res: Response) {
7982}
8083
8184export async function verifyMagicLink ( req : Request , res : Response ) {
85+ logger . debug ( 'Verifying magic link' ) ;
8286 const { token } = req . params ;
8387
8488 if ( ! token ) {
@@ -91,18 +95,23 @@ export async function verifyMagicLink(req: Request, res: Response) {
9195 } ) ;
9296
9397 if ( ! record ) {
98+ logger . warn ( `No magic link found for token: ${ token } ` ) ;
9499 return res . status ( 400 ) . json ( { message : 'Invalid verification token' } ) ;
95100 }
96101
97102 if ( record . used_at ) {
103+ logger . warn ( `Magic link token is already used ${ token } ` ) ;
98104 return res . status ( 400 ) . json ( { message : 'Invalid verification token' } ) ;
99105 }
100106
101107 if ( record . expires_at < new Date ( ) ) {
108+ logger . warn ( `Magic link token expired: ${ token } ` ) ;
102109 return res . status ( 400 ) . json ( { message : 'Invalid verification token' } ) ;
103110 }
104111
105112 // Atomic consume
113+ logger . info ( `Magic link being consumed ${ token } ` ) ;
114+
106115 const [ updated ] = await MagicLinkToken . update (
107116 { used_at : new Date ( ) } ,
108117 {
@@ -114,13 +123,15 @@ export async function verifyMagicLink(req: Request, res: Response) {
114123 ) ;
115124
116125 if ( ! updated ) {
126+ logger . error ( `Magic link token was not consumted: ${ token } ` ) ;
117127 return res . status ( 500 ) . json ( { message : 'Failed to use token' } ) ;
118128 }
119129
120130 await AuthEventService . log ( {
121131 userId : record . user_id ,
122132 type : 'magic_link_success' ,
123133 req,
134+ metadata : { message : `Token: ${ token } ` } ,
124135 } ) ;
125136
126137 // Device binding check
0 commit comments