@ -439,54 +439,58 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
public virtual async Task < string > GetUserNameFromEmailAsync ( string email )
public virtual async Task < string > GetUserNameFromEmailAsync ( string email )
{
{
const int maxTryCount = 2 0 ;
var tryCount = 0 ;
var userName = email . Split ( '@' ) [ 0 ] ;
var userName = email . Split ( '@' ) [ 0 ] ;
if ( ! Options . User . AllowedUserNameCharacters . IsNullOrWhiteSpace ( ) & & ! userName . All ( Options . User . AllowedUserNameCharacters . Contains ) )
if ( ! Options . User . AllowedUserNameCharacters . IsNullOrWhiteSpace ( ) & & ! userName . All ( Options . User . AllowedUserNameCharacters . Contains ) )
{
{
// The user name contains not allowed characters. We will use the email address as user name.
// The username contains not allowed characters. So, we are generating a random username.
return email ;
do
{
var randomUserName = await GetRandomUserNameAsync ( userName . Length ) ;
if ( await ValidateUserNameAsync ( randomUserName ) )
{
return randomUserName ;
}
tryCount + + ;
} while ( tryCount < maxTryCount ) ;
}
}
else if ( await ValidateUserNameAsync ( userName ) )
if ( await ValidateUserNameAsync ( userName ) )
{
{
// The username is valid.
return userName ;
return userName ;
}
}
else if ( Options . User . AllowedUserNameCharacters . IsNullOrWhiteSpace ( ) | | "0123456789" . All ( Options . User . AllowedUserNameCharacters . Contains ) )
const int maxTryCount = 1 0 ;
var tryCount = 0 ;
if ( Options . User . AllowedUserNameCharacters . IsNullOrWhiteSpace ( ) | | "0123456789" . All ( Options . User . AllowedUserNameCharacters . Contains ) )
{
{
var randomUserName = userName ;
// The AllowedUserNameCharacters includes numbers. So, we are generating 4 random numbers and appending to the username.
var isUserNameValid = await ValidateUserNameAsync ( randomUserName ) ;
tryCount = 0 ;
while ( tryCount < maxTryCount )
do
{
{
randomUserName = userName + RandomHelper . GetRandom ( 1 0 0 0 , 9 9 9 9 ) ;
var randomUserName = userName + RandomHelper . GetRandom ( 1 0 0 0 , 9 9 9 9 ) ;
isUserNameValid = await ValidateUserNameAsync ( randomUserName ) ;
if ( await ValidateUserNameAsync ( randomUserName ) )
if ( isUserNameValid )
{
{
return randomUserName ;
return randomUserName ;
}
}
tryCount + + ;
tryCount + + ;
}
} while ( tryCount < maxTryCount ) ;
if ( isUserNameValid )
{
return randomUserName ;
}
}
}
else
tryCount = 0 ;
while ( tryCount < maxTryCount )
{
{
var randomUserName = userName + await GetRandomUserNameAsync ( 4 ) ;
tryCount = 0 ;
var isUserNameValid = await ValidateUserNameAsync ( randomUserName ) ;
do
if ( isUserNameValid )
{
{
return randomUserName ;
// The AllowedUserNameCharacters does not include numbers. So, we are generating 4 random characters and appending to the username.
}
var randomUserName = userName + await GetRandomUserNameAsync ( 4 ) ;
tryCount + + ;
if ( await ValidateUserNameAsync ( randomUserName ) )
{
return randomUserName ;
}
tryCount + + ;
} while ( tryCount < maxTryCount ) ;
}
}
// We could not find a valid user name so we are returning the email address.
throw new AbpException ( $"Could not get a valid user name for the given email address: {email}, allowed characters: {Options.User.AllowedUserNameCharacters}, tried {maxTryCount} times." ) ;
return email ;
}
}
}
}