@@ -33,7 +33,7 @@ public UserService(IServiceProvider services,
3333 public async Task < User > CreateUser ( User user )
3434 {
3535 string hasRegisterId = null ;
36- if ( string . IsNullOrEmpty ( user . UserName ) )
36+ if ( string . IsNullOrWhiteSpace ( user . UserName ) )
3737 {
3838 // generate unique name
3939 var name = Nanoid . Generate ( "0123456789botsharp" , 10 ) ;
@@ -45,16 +45,46 @@ public async Task<User> CreateUser(User user)
4545 }
4646
4747 var db = _services . GetRequiredService < IBotSharpRepository > ( ) ;
48- var record = db . GetUserByUserName ( user . UserName ) ;
48+
49+ User ? record = null ;
50+
51+ if ( ! string . IsNullOrWhiteSpace ( user . UserName ) )
52+ {
53+ record = db . GetUserByUserName ( user . UserName ) ;
54+ }
55+
56+ if ( record != null && record . Verified )
57+ {
58+ // account is already activated
59+ _logger . LogWarning ( $ "User account already exists: { record . Id } { record . UserName } ") ;
60+ return record ;
61+ }
62+
63+ if ( ! string . IsNullOrWhiteSpace ( user . Phone ) )
64+ {
65+ record = db . GetUserByPhone ( user . Phone ) ;
66+ }
67+
68+ if ( record == null && ! string . IsNullOrWhiteSpace ( user . Email ) )
69+ {
70+ record = db . GetUserByEmail ( user . Email ) ;
71+ }
4972
5073 if ( record != null )
5174 {
5275 hasRegisterId = record . Id ;
5376 }
5477
55- if ( string . IsNullOrEmpty ( user . Id ) )
78+ if ( string . IsNullOrWhiteSpace ( user . Id ) )
5679 {
57- user . Id = Guid . NewGuid ( ) . ToString ( ) ;
80+ if ( ! string . IsNullOrWhiteSpace ( hasRegisterId ) )
81+ {
82+ user . Id = hasRegisterId ;
83+ }
84+ else
85+ {
86+ user . Id = Guid . NewGuid ( ) . ToString ( ) ;
87+ }
5888 }
5989
6090 record = user ;
@@ -68,7 +98,7 @@ record = user;
6898
6999 if ( _setting . NewUserVerification )
70100 {
71- record . VerificationCode = Nanoid . Generate ( alphabet : "0123456789" , size : 6 ) ;
101+ // record.VerificationCode = Nanoid.Generate(alphabet: "0123456789", size: 6);
72102 record . Verified = false ;
73103 }
74104
@@ -421,6 +451,23 @@ public async Task<bool> VerifyEmailExisting(string email)
421451 return false ;
422452 }
423453
454+ public async Task < bool > VerifyPhoneExisting ( string phone )
455+ {
456+ if ( string . IsNullOrEmpty ( phone ) )
457+ {
458+ return true ;
459+ }
460+
461+ var db = _services . GetRequiredService < IBotSharpRepository > ( ) ;
462+ var UserByphone = db . GetUserByPhone ( phone ) ;
463+ if ( UserByphone != null && UserByphone . Verified )
464+ {
465+ return true ;
466+ }
467+
468+ return false ;
469+ }
470+
424471 public async Task < bool > SendVerificationCodeResetPasswordNoLogin ( User user )
425472 {
426473 var db = _services . GetRequiredService < IBotSharpRepository > ( ) ;
@@ -456,7 +503,7 @@ record = db.GetUserByEmail(user.Email);
456503 var hooks = _services . GetServices < IAuthenticationHook > ( ) ;
457504 foreach ( var hook in hooks )
458505 {
459- hook . VerificationCodeResetPassword ( record ) ;
506+ await hook . VerificationCodeResetPassword ( record ) ;
460507 }
461508
462509 return true ;
@@ -487,7 +534,7 @@ record = db.GetUserById(_user.Id);
487534 var hooks = _services . GetServices < IAuthenticationHook > ( ) ;
488535 foreach ( var hook in hooks )
489536 {
490- hook . VerificationCodeResetPassword ( record ) ;
537+ await hook . VerificationCodeResetPassword ( record ) ;
491538 }
492539
493540 return true ;
@@ -533,12 +580,20 @@ public async Task<bool> ModifyUserEmail(string email)
533580 var curUser = await GetMyProfile ( ) ;
534581 var db = _services . GetRequiredService < IBotSharpRepository > ( ) ;
535582 var record = db . GetUserById ( curUser . Id ) ;
536- if ( record == null )
583+ var existEmail = db . GetUserByEmail ( email ) ;
584+ if ( record == null || existEmail != null )
537585 {
538586 return false ;
539587 }
540588
541- db . UpdateUserEmail ( record . Id , email ) ;
589+ record . Email = email ;
590+ var hooks = _services . GetServices < IAuthenticationHook > ( ) ;
591+ foreach ( var hook in hooks )
592+ {
593+ await hook . UserUpdating ( record ) ;
594+ }
595+
596+ db . UpdateUserEmail ( record . Id , record . Email ) ;
542597 return true ;
543598 }
544599
@@ -547,18 +602,23 @@ public async Task<bool> ModifyUserPhone(string phone)
547602 var curUser = await GetMyProfile ( ) ;
548603 var db = _services . GetRequiredService < IBotSharpRepository > ( ) ;
549604 var record = db . GetUserById ( curUser . Id ) ;
605+ var existPhone = db . GetUserByPhone ( phone ) ;
550606
551- if ( record == null )
607+ if ( record == null || existPhone != null )
552608 {
553609 return false ;
554610 }
555611
556- if ( ( record . UserName . Substring ( 0 , 3 ) == "+86" || record . FirstName . Substring ( 0 , 3 ) == "+86" ) && phone . Substring ( 0 , 3 ) != "+86" )
612+ record . Phone = phone ;
613+
614+ var hooks = _services . GetServices < IAuthenticationHook > ( ) ;
615+ foreach ( var hook in hooks )
557616 {
558- phone = $ "+86 { phone } " ;
617+ await hook . UserUpdating ( record ) ;
559618 }
560619
561- db . UpdateUserPhone ( record . Id , phone ) ;
620+ db . UpdateUserPhone ( record . Id , record . Phone ) ;
621+
562622 return true ;
563623 }
564624
0 commit comments