@page "/login" @layout LoginLayout @* Login MUST stay anonymously reachable — otherwise the fallback authorization policy would lock operators out of the only way in (Admin-001). Static-rendered on purpose: the form POSTs to /auth/login while ASP.NET still owns an unstarted HTTP response. Calling SignInAsync from an interactive circuit would be too late. Uses LoginLayout (no side rail) so the page renders as a clean centred card. *@ @attribute [Microsoft.AspNetCore.Authorization.AllowAnonymous]
OtOpcUa Admin — sign in
@if (ReturnUrl is not null) { }
@if (!string.IsNullOrWhiteSpace(Error)) {
@Error
}
@code { /// Error message surfaced by /auth/login after a failed bind. [SupplyParameterFromQuery] private string? Error { get; set; } /// Original protected URL the operator was bounced from; round-tripped to the endpoint. [SupplyParameterFromQuery] private string? ReturnUrl { get; set; } }