66 lines
2.4 KiB
Plaintext
66 lines
2.4 KiB
Plaintext
@page "/Account/ResendEmailConfirmation"
|
|
|
|
@using System.ComponentModel.DataAnnotations
|
|
@using System.Text
|
|
@using System.Text.Encodings.Web
|
|
@using Microsoft.AspNetCore.Identity
|
|
@using Microsoft.AspNetCore.WebUtilities
|
|
@using BlazorApp1.Data
|
|
|
|
@inject UserManager<ApplicationUser> UserManager
|
|
@inject IEmailSender<ApplicationUser> EmailSender
|
|
@inject NavigationManager NavigationManager
|
|
@inject IdentityRedirectManager RedirectManager
|
|
|
|
<PageTitle>Resend email confirmation</PageTitle>
|
|
|
|
<h1>Resend email confirmation</h1>
|
|
<h2>Enter your email.</h2>
|
|
<hr/>
|
|
<StatusMessage Message="@message"/>
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<EditForm Model="Input" FormName="resend-email-confirmation" OnValidSubmit="OnValidSubmitAsync" method="post">
|
|
<DataAnnotationsValidator/>
|
|
<ValidationSummary class="text-danger" role="alert"/>
|
|
<div class="form-floating mb-3">
|
|
<InputText @bind-Value="Input.Email" class="form-control" aria-required="true" placeholder="name@example.com"/>
|
|
<label for="email" class="form-label">Email</label>
|
|
<ValidationMessage For="() => Input.Email" class="text-danger"/>
|
|
</div>
|
|
<button type="submit" class="w-100 btn btn-lg btn-primary">Resend</button>
|
|
</EditForm>
|
|
</div>
|
|
</div>
|
|
|
|
@code {
|
|
private string? message;
|
|
|
|
[SupplyParameterFromForm] private InputModel Input { get; set; } = new();
|
|
|
|
private async Task OnValidSubmitAsync()
|
|
{
|
|
var user = await UserManager.FindByEmailAsync(Input.Email!);
|
|
if (user is null)
|
|
{
|
|
message = "Verification email sent. Please check your email.";
|
|
return;
|
|
}
|
|
|
|
var userId = await UserManager.GetUserIdAsync(user);
|
|
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user);
|
|
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
|
|
var callbackUrl = NavigationManager.GetUriWithQueryParameters(
|
|
NavigationManager.ToAbsoluteUri("Account/ConfirmEmail").AbsoluteUri,
|
|
new Dictionary<string, object?> { ["userId"] = userId, ["code"] = code });
|
|
await EmailSender.SendConfirmationLinkAsync(user, Input.Email, HtmlEncoder.Default.Encode(callbackUrl));
|
|
|
|
message = "Verification email sent. Please check your email.";
|
|
}
|
|
|
|
private sealed class InputModel
|
|
{
|
|
[Required] [EmailAddress] public string Email { get; set; } = "";
|
|
}
|
|
|
|
} |