Im trying to add a checkbox and handle the change event, i can post back to the controller if i do
<input type="checkbox" name="RememberMe" checked="@ViewBag.RememberMe" /> RememberMe
It always posts false, I don't know how to handle the change event or if/how to extend the @model AuthenticationScheme[] to include a RememberMe property
Controller
[HttpPost("~/signin")]
public async Task<IActionResult> SignIn([FromForm] string provider, bool rememberMe)
{
// Note: the "provider" parameter corresponds to the external
// authentication provider choosen by the user agent.
_serverStore.RememberMe = rememberMe;
if (string.IsNullOrWhiteSpace(provider))
{
return BadRequest();
}
if (!await HttpContext.IsProviderSupportedAsync(provider))
{
return BadRequest();
}
if (User.Identity is not null && User.Identity.IsAuthenticated)
{
User? user = new()
{
NameIdentifier = 0,
Email = string.Empty
};
long dbuserId = await CreateOrUpdateUser(user).ConfigureAwait(false);
ClaimsIdentity? identity = User.Identity as ClaimsIdentity;
identity?.AddClaim(new Claim("Id", dbuserId.ToString()));
return Redirect("/");
}
return Challenge(new AuthenticationProperties { RedirectUri = "/Login", ExpiresUtc = DateTime.UtcNow.AddYears(1), IsPersistent = true, AllowRefresh = true, IssuedUtc = DateTime.Now, Items = { new KeyValuePair<string, string?>("MyId", "123456") } }, provider);
}
View
@using Microsoft.AspNetCore.Authentication
@model AuthenticationScheme[]
<div class="jumbotron">
<h1>Authentication</h1>
<p class="lead text-left">Sign in using one of these external providers:</p>
@foreach (var scheme in Model.OrderBy(p => p.DisplayName))
{
<form action="/signin" method="post">
<input type="hidden" name="Provider" value="@scheme.Name" />
<input type="hidden" name="ReturnUrl" value="@ViewBag.ReturnUrl" />
@*<input type="checkbox" name="RememberMe" checked="@scheme." onchange =@HandleRememberMeChange(a) /> RememberMe*@
<button class="btn btn-lg btn-success m-1" type="submit">Connect using @scheme.DisplayName</button>
</form>
}
</div>