Fix logout, the client log store and empty name attributes

Logout:
- It navigated to "authenticatio/logout", a misspelled route.
- The correct template route, authentication/logout, would throw anyway. Its
  RemoteAuthenticatorView casts the AuthenticationStateProvider to the OIDC
  template's service, and the app registers TokenAuthStateProvider instead.
- It now signs out through TokenAuthStateProvider.LogoutAsync, as the code
  commented out in the page intended, and returns home. LoginDisplay's sign-out
  goes through it as well.
- This also drops the obsolete SignOutSessionStateManager, the build's last
  warning.

The IndexedDB schema never declared the ClientLogs store that IStorage.AddLog
writes to, so every client log write failed inside its try/catch. Version 2 adds
the store, keyed by the Id AddLog assigns.

DInputBase.NameAttribute renders no name instead of name="" when the form maps
no field names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-03 12:43:07 +02:00
1 parent 81b92e012b
commit 96d1db1008
10 files changed
+29 -15

No files matched your search

+2 -2
View File
@@ -5,14 +5,14 @@
moves to a wrapping <label>, as daisyUI requires when the field holds more than one element. *@
@if (Prefix is null && Suffix is null)
{
<input @attributes="InputAttributes" type="@Type" class="@CssClassFull" name="@NameAttributeValue"
<input @attributes="InputAttributes" type="@Type" class="@CssClassFull" name="@NameAttribute"
value="@CurrentValueAsString" @oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
}
else
{
<label class="@CssClassFull">
@Prefix
<input @attributes="InputAttributes" type="@Type" class="grow" name="@NameAttributeValue"
<input @attributes="InputAttributes" type="@Type" class="grow" name="@NameAttribute"
value="@CurrentValueAsString" @oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
@Suffix
</label>
+1 -1
View File
@@ -9,7 +9,7 @@
<span></span>
}
<input type="text" autocomplete="one-time-code" inputmode="numeric" required @attributes="InputAttributes"
maxlength="@Digits" pattern="@($"[0-9]{{{Digits}}}")" name="@NameAttributeValue" value="@CurrentValueAsString"
maxlength="@Digits" pattern="@($"[0-9]{{{Digits}}}")" name="@NameAttribute" value="@CurrentValueAsString"
@oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
</label>
+1 -1
View File
@@ -3,7 +3,7 @@
@* daisyUI Range: https://daisyui.com/components/range/ . TValue is numeric; Min and Max are always rendered, as daisyUI
requires. *@
<input @attributes="InputAttributes" type="range" class="@CssClassFull" name="@NameAttributeValue" min="@Format(Min)"
<input @attributes="InputAttributes" type="range" class="@CssClassFull" name="@NameAttribute" min="@Format(Min)"
max="@Format(Max)" step="@(Step is null ? null : Format(Step.Value))" value="@CurrentValueAsString"
@oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
+2 -2
View File
@@ -5,7 +5,7 @@
enums bind by name. With Prefix (an icon or a span.label) the select class moves to a wrapping <label>. *@
@if (Prefix is null)
{
<select @attributes="InputAttributes" class="@CssClassFull" name="@NameAttributeValue" value="@CurrentValueAsString"
<select @attributes="InputAttributes" class="@CssClassFull" name="@NameAttribute" value="@CurrentValueAsString"
@onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)">
@ChildContent
</select>
@@ -14,7 +14,7 @@ else
{
<label class="@CssClassFull">
@Prefix
<select @attributes="InputAttributes" name="@NameAttributeValue" value="@CurrentValueAsString" @onchange="OnChange"
<select @attributes="InputAttributes" name="@NameAttribute" value="@CurrentValueAsString" @onchange="OnChange"
aria-invalid="@(IsInvalid ? "true" : null)">
@ChildContent
</select>
+1 -1
View File
@@ -3,7 +3,7 @@
@* daisyUI Textarea: https://daisyui.com/components/textarea/ . Blazor sets the textarea's value property, so the bound
value is the content; rows, placeholder and the like pass through. *@
<textarea @attributes="InputAttributes" class="@CssClassFull" name="@NameAttributeValue" value="@CurrentValueAsString"
<textarea @attributes="InputAttributes" class="@CssClassFull" name="@NameAttribute" value="@CurrentValueAsString"
@oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)"></textarea>
@code {
+1 -1
View File
@@ -39,7 +39,7 @@ else
string WrapperClass => Cx("toggle", IsInvalid ? "has-checked:[--input-color:var(--color-error)]" : WrapperColorClass, SizeClass, CssClass);
RenderFragment Checkbox(string cssClass) =>
@<input @attributes="InputAttributes" type="checkbox" class="@cssClass" name="@NameAttributeValue" checked="@CurrentValue"
@<input @attributes="InputAttributes" type="checkbox" class="@cssClass" name="@NameAttribute" checked="@CurrentValue"
@onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />;
RenderFragment IconParts => @<text>