From dfbb4f9755006f19ea93aba5d319a20004277987 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Wed, 23 Oct 2019 19:49:16 -0700 Subject: [PATCH] Fix account confirmation email URL. --- .../Pages/Account/Manage/Index.cshtml.cs | 2 +- .../Identity/Pages/Account/Register.cshtml.cs | 31 ++++++++++++++----- Server/Server.csproj | 5 +++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Server/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs b/Server/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs index b843d031..77b34040 100644 --- a/Server/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs +++ b/Server/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs @@ -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, diff --git a/Server/Areas/Identity/Pages/Account/Register.cshtml.cs b/Server/Areas/Identity/Pages/Account/Register.cshtml.cs index c6e5c8d5..bc0b1db7 100644 --- a/Server/Areas/Identity/Pages/Account/Register.cshtml.cs +++ b/Server/Areas/Identity/Pages/Account/Register.cshtml.cs @@ -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 _signInManager; private readonly UserManager _userManager; private readonly ILogger _logger; - private readonly EmailSender _emailSender; + private readonly IEmailSender _emailSender; public RegisterModel( UserManager userManager, SignInManager signInManager, ILogger 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 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 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", $"

Please confirm your Remotely account by clicking here."); - 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) { diff --git a/Server/Server.csproj b/Server/Server.csproj index d1b7ee03..3e4d3c3b 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -65,6 +65,11 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + +