@@ -18,22 +18,23 @@ import {
1818export function DrizzleAdapter ( db : MySql2Database ) : Adapter {
1919 return {
2020 async createUser ( userData : any ) {
21+ const normalizedEmail = ( userData . email as string ) ?. toLowerCase ( ) ?? "" ;
2122 const userId = User . UserId . make ( nanoId ( ) ) ;
2223 await db . transaction ( async ( tx ) => {
2324 const [ pendingInvite ] = await tx
2425 . select ( { id : organizationInvites . id } )
2526 . from ( organizationInvites )
2627 . where (
2728 and (
28- eq ( organizationInvites . invitedEmail , userData . email ) ,
29+ eq ( organizationInvites . invitedEmail , normalizedEmail ) ,
2930 eq ( organizationInvites . status , "pending" ) ,
3031 ) ,
3132 )
3233 . limit ( 1 ) ;
3334
3435 await tx . insert ( users ) . values ( {
3536 id : userId ,
36- email : userData . email ,
37+ email : normalizedEmail ,
3738 emailVerified : userData . emailVerified ,
3839 name : userData . name ,
3940 image : userData . image ,
@@ -78,7 +79,7 @@ export function DrizzleAdapter(db: MySql2Database): Adapter {
7879
7980 if ( STRIPE_AVAILABLE ( ) ) {
8081 const existingCustomers = await stripe ( ) . customers . list ( {
81- email : userData . email ,
82+ email : normalizedEmail ,
8283 limit : 1 ,
8384 } ) ;
8485
@@ -94,7 +95,7 @@ export function DrizzleAdapter(db: MySql2Database): Adapter {
9495 } ) ;
9596 } else {
9697 customer = await stripe ( ) . customers . create ( {
97- email : userData . email ,
98+ email : normalizedEmail ,
9899 metadata : {
99100 userId : row . id ,
100101 } ,
@@ -153,10 +154,11 @@ export function DrizzleAdapter(db: MySql2Database): Adapter {
153154 return row ?? null ;
154155 } ,
155156 async getUserByEmail ( email ) {
157+ const normalizedEmail = email ?. toLowerCase ( ) ?? "" ;
156158 const rows = await db
157159 . select ( )
158160 . from ( users )
159- . where ( eq ( users . email , email ) )
161+ . where ( eq ( users . email , normalizedEmail ) )
160162 . limit ( 1 )
161163 . catch ( ( e ) => {
162164 throw e ;
@@ -288,10 +290,12 @@ export function DrizzleAdapter(db: MySql2Database): Adapter {
288290 await db . delete ( sessions ) . where ( eq ( sessions . sessionToken , sessionToken ) ) ;
289291 } ,
290292 async createVerificationToken ( verificationToken ) {
293+ const normalizedIdentifier =
294+ verificationToken . identifier ?. toLowerCase ( ) ?? "" ;
291295 const existingTokens = await db
292296 . select ( )
293297 . from ( verificationTokens )
294- . where ( eq ( verificationTokens . identifier , verificationToken . identifier ) )
298+ . where ( eq ( verificationTokens . identifier , normalizedIdentifier ) )
295299 . limit ( 1 ) ;
296300
297301 if ( existingTokens . length > 0 ) {
@@ -301,23 +305,19 @@ export function DrizzleAdapter(db: MySql2Database): Adapter {
301305 token : verificationToken . token ,
302306 expires : verificationToken . expires ,
303307 } )
304- . where (
305- eq ( verificationTokens . identifier , verificationToken . identifier ) ,
306- ) ;
308+ . where ( eq ( verificationTokens . identifier , normalizedIdentifier ) ) ;
307309
308310 return await db
309311 . select ( )
310312 . from ( verificationTokens )
311- . where (
312- eq ( verificationTokens . identifier , verificationToken . identifier ) ,
313- )
313+ . where ( eq ( verificationTokens . identifier , normalizedIdentifier ) )
314314 . limit ( 1 )
315315 . then ( ( rows ) => rows [ 0 ] ) ;
316316 }
317317
318318 await db . insert ( verificationTokens ) . values ( {
319319 expires : verificationToken . expires ,
320- identifier : verificationToken . identifier ,
320+ identifier : normalizedIdentifier ,
321321 token : verificationToken . token ,
322322 } ) ;
323323
@@ -338,15 +338,18 @@ export function DrizzleAdapter(db: MySql2Database): Adapter {
338338 . limit ( 1 ) ;
339339 const row = rows [ 0 ] ;
340340 if ( ! row ) return null ;
341+ const normalizedIdentifier = identifier ?. toLowerCase ( ) ?? "" ;
342+ const storedIdentifier = row . identifier ?. toLowerCase ( ) ?? "" ;
343+ if ( normalizedIdentifier !== storedIdentifier ) return null ;
341344 await db
342345 . delete ( verificationTokens )
343346 . where (
344347 and (
345348 eq ( verificationTokens . token , token ) ,
346- eq ( verificationTokens . identifier , identifier ) ,
349+ eq ( verificationTokens . identifier , row . identifier ) ,
347350 ) ,
348351 ) ;
349- return row ;
352+ return { ... row , identifier : storedIdentifier } ;
350353 } ,
351354 } ;
352355}
0 commit comments