Fix account confirmation email URL.

This commit is contained in:
Jared Goodwin 2019-10-23 19:49:16 -07:00
parent 315e6372b9
commit dfbb4f9755
3 changed files with 29 additions and 9 deletions

View File

@ -135,7 +135,7 @@ namespace Remotely.Server.Areas.Identity.Pages.Account.Manage
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { userId = userId, code = code },
values: new { area = "Identity", userId = user.Id, code = code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(
email,

View File

@ -1,16 +1,19 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Remotely.Shared.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;
using Remotely.Server.Services;
using Remotely.Shared.Models;
namespace Remotely.Server.Areas.Identity.Pages.Account
{
@ -20,13 +23,13 @@ namespace Remotely.Server.Areas.Identity.Pages.Account
private readonly SignInManager<RemotelyUser> _signInManager;
private readonly UserManager<RemotelyUser> _userManager;
private readonly ILogger<RegisterModel> _logger;
private readonly EmailSender _emailSender;
private readonly IEmailSender _emailSender;
public RegisterModel(
UserManager<RemotelyUser> userManager,
SignInManager<RemotelyUser> signInManager,
ILogger<RegisterModel> logger,
EmailSender emailSender)
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
@ -39,6 +42,8 @@ namespace Remotely.Server.Areas.Identity.Pages.Account
public string ReturnUrl { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public class InputModel
{
[Required]
@ -58,14 +63,16 @@ namespace Remotely.Server.Areas.Identity.Pages.Account
public string ConfirmPassword { get; set; }
}
public void OnGet(string returnUrl = null)
public async Task OnGetAsync(string returnUrl = null)
{
ReturnUrl = returnUrl;
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
if (ModelState.IsValid)
{
var user = new RemotelyUser { UserName = Input.Email, Email = Input.Email };
@ -75,17 +82,25 @@ namespace Remotely.Server.Areas.Identity.Pages.Account
_logger.LogInformation("User created a new account with password.");
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { userId = user.Id, code = code },
values: new { area = "Identity", userId = user.Id, code = code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
$"<img src='https://remotely.lucency.co/images/Remotely_Logo.png'/><br><br>Please confirm your Remotely account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
return RedirectToPage("RegisterConfirmation", new { email = Input.Email });
}
else
{
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
}
}
foreach (var error in result.Errors)
{

View File

@ -65,6 +65,11 @@
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.3.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="3.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" PrivateAssets="All" />
<PackageReference Include="NETStandard.Library" Version="2.0.3" />