diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs index f8313136f7..e759ae515e 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs @@ -4,9 +4,11 @@ using System; using System.ComponentModel.DataAnnotations; using System.Security.Claims; +using System.Text.Encodings.Web; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; @@ -94,19 +96,22 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Internal private readonly UserManager _userManager; private readonly IUserStore _userStore; private readonly IUserEmailStore _emailStore; + private readonly IEmailSender _emailSender; private readonly ILogger _logger; public ExternalLoginModel( SignInManager signInManager, UserManager userManager, IUserStore userStore, - ILogger logger) + ILogger logger, + IEmailSender emailSender) { _signInManager = signInManager; _userManager = userManager; _userStore = userStore; _emailStore = GetEmailStore(); _logger = logger; + _emailSender = emailSender; } public override IActionResult OnGet() @@ -190,6 +195,18 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Internal { await _signInManager.SignInAsync(user, isPersistent: false); _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider); + + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + var callbackUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { userId = userId, code = code }, + protocol: Request.Scheme); + + await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", + $"Please confirm your account by clicking here."); + return LocalRedirect(returnUrl); } } diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs index 5f6e720a0d..43ab958149 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs @@ -4,9 +4,11 @@ using System; using System.ComponentModel.DataAnnotations; using System.Security.Claims; +using System.Text.Encodings.Web; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; @@ -93,19 +95,22 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal private readonly UserManager _userManager; private readonly IUserStore _userStore; private readonly IUserEmailStore _emailStore; + private readonly IEmailSender _emailSender; private readonly ILogger _logger; public ExternalLoginModel( SignInManager signInManager, UserManager userManager, IUserStore userStore, - ILogger logger) + ILogger logger, + IEmailSender emailSender) { _signInManager = signInManager; _userManager = userManager; _userStore = userStore; _emailStore = GetEmailStore(); _logger = logger; + _emailSender = emailSender; } public override IActionResult OnGet() @@ -189,6 +194,18 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal { await _signInManager.SignInAsync(user, isPersistent: false); _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider); + + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + var callbackUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { userId = userId, code = code }, + protocol: Request.Scheme); + + await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", + $"Please confirm your account by clicking here."); + return LocalRedirect(returnUrl); } } diff --git a/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj b/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj index 0637f96151..849822f436 100644 --- a/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj +++ b/src/Identity/samples/IdentitySample.DefaultUI/IdentitySample.DefaultUI.csproj @@ -1,4 +1,4 @@ - + Identity sample MVC application on ASP.NET Core using the default UI @@ -18,6 +18,7 @@ + diff --git a/src/Identity/samples/IdentitySample.DefaultUI/Startup.cs b/src/Identity/samples/IdentitySample.DefaultUI/Startup.cs index 12854864ce..6549d0416a 100644 --- a/src/Identity/samples/IdentitySample.DefaultUI/Startup.cs +++ b/src/Identity/samples/IdentitySample.DefaultUI/Startup.cs @@ -35,7 +35,7 @@ namespace IdentitySample.DefaultUI .UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("IdentitySample.DefaultUI"))); - services.AddMvc(); + services.AddMvc().AddNewtonsoftJson(); services.AddDefaultIdentity() .AddRoles()