abpframework/abp · error · CliUsageException

Username name is missing!

Error message

Username name is missing!

What it means

Thrown by LoginCommand.ExecuteAsync when the --device flag is not set and the username (commandLineArgs.Target) is null or empty. The `abp login` command requires a username as a positional argument unless using device-based authentication flow. The error includes usage info via GetUsageInfo().

Source

Thrown at framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs:43

    public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }

    public LoginCommand(AuthService authService,
        ICancellationTokenProvider cancellationTokenProvider,
        IRemoteServiceExceptionHandler remoteServiceExceptionHandler)
    {
        AuthService = authService;
        CancellationTokenProvider = cancellationTokenProvider;
        RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
        Logger = NullLogger<LoginCommand>.Instance;
    }

    public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
    {
        if (!commandLineArgs.Options.ContainsKey("device"))
        {
            if (commandLineArgs.Target.IsNullOrEmpty())
            {
                throw new CliUsageException(
                    "Username name is missing!" +
                    Environment.NewLine + Environment.NewLine +
                    GetUsageInfo()
                );
            }

            var organization = commandLineArgs.Options.GetOrNull(Options.Organization.Short, Options.Organization.Long);

            if (await HasMultipleOrganizationAndThisNotSpecified(commandLineArgs, organization))
            {
                return;
            }

            var password = commandLineArgs.Options.GetOrNull(Options.Password.Short, Options.Password.Long);
            if (password == null)
            {
                Console.Write("Password: ");
                password = ConsoleHelper.ReadSecret();

View on GitHub (pinned to 7ed43b1931)

Solutions

  1. Provide the username as a positional argument: `abp login myuser@example.com -p mypassword`
  2. Alternatively use device authentication: `abp login --device` which does not require a positional username
  3. Note: the password can be passed via -p flag or will be prompted interactively, but the username must be positional

Example fix

// before
abp login

// after
abp login myuser@example.com
// or
abp login --device
Defensive patterns

Strategy: validation

Validate before calling

// Validate username before running login
var useDeviceFlow = commandLineArgs.Options.ContainsKey("device");
if (!useDeviceFlow && string.IsNullOrWhiteSpace(commandLineArgs.Target))
{
    Console.Error.WriteLine("Error: Username is required (positional) or use --device for device flow.");
    return;
}

Try / catch

try
{
    await loginCommand.ExecuteAsync(commandLineArgs);
}
catch (CliUsageException ex) when (ex.Message.Contains("Username name is missing"))
{
    logger.LogError("Provide username positionally: abp login <email> or use --device");
}

Prevention

When it happens

Trigger: Running `abp login` without a username and without the --device flag. commandLineArgs.Target.IsNullOrEmpty() returns true and the 'device' option key is absent from commandLineArgs.Options.

Common situations: Developer forgets to type the username, uses `--username name` instead of a positional argument, or expects an interactive prompt that does not exist for the username field.

Related errors


AI-assisted analysis of abpframework/abp@7ed43b1931 (2026-08-13). Data as JSON: /api/errors/92af953f1b804811. Report an issue: GitHub.