Skip to content

Commit 109663e

Browse files
HaoKajcvickers
authored andcommitted
Send confirmation mails for external accounts
1 parent 89d2640 commit 109663e

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,6 @@ public override async Task<IActionResult> OnPostConfirmationAsync(string returnU
197197
{
198198
_logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
199199

200-
// If account confirmation is required, we need to show the link if we don't have a real email sender
201-
if (_userManager.Options.SignIn.RequireConfirmedAccount)
202-
{
203-
return RedirectToPage("./RegisterConfirmation", new { Email = Input.Email });
204-
}
205-
206-
await _signInManager.SignInAsync(user, isPersistent: false);
207200
var userId = await _userManager.GetUserIdAsync(user);
208201
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
209202
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
@@ -215,6 +208,14 @@ public override async Task<IActionResult> OnPostConfirmationAsync(string returnU
215208

216209
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
217210
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
211+
212+
// If account confirmation is required, we need to show the link if we don't have a real email sender
213+
if (_userManager.Options.SignIn.RequireConfirmedAccount)
214+
{
215+
return RedirectToPage("./RegisterConfirmation", new { Email = Input.Email });
216+
}
217+
218+
await _signInManager.SignInAsync(user, isPersistent: false);
218219

219220
return LocalRedirect(returnUrl);
220221
}

src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,7 @@ public ExternalLoginModel(
116116
_emailSender = emailSender;
117117
}
118118

119-
public override IActionResult OnGet()
120-
{
121-
return RedirectToPage("./Login");
122-
}
119+
public override IActionResult OnGet() => RedirectToPage("./Login");
123120

124121
public override IActionResult OnPost(string provider, string returnUrl = null)
125122
{
@@ -197,13 +194,6 @@ public override async Task<IActionResult> OnPostConfirmationAsync(string returnU
197194
{
198195
_logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
199196

200-
// If account confirmation is required, we need to show the link if we don't have a real email sender
201-
if (_userManager.Options.SignIn.RequireConfirmedAccount)
202-
{
203-
return RedirectToPage("./RegisterConfirmation", new { Email = Input.Email });
204-
}
205-
206-
await _signInManager.SignInAsync(user, isPersistent: false);
207197
var userId = await _userManager.GetUserIdAsync(user);
208198
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
209199
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
@@ -216,6 +206,13 @@ public override async Task<IActionResult> OnPostConfirmationAsync(string returnU
216206
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
217207
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
218208

209+
// If account confirmation is required, we need to show the link if we don't have a real email sender
210+
if (_userManager.Options.SignIn.RequireConfirmedAccount)
211+
{
212+
return RedirectToPage("./RegisterConfirmation", new { Email = Input.Email });
213+
}
214+
215+
await _signInManager.SignInAsync(user, isPersistent: false);
219216
return LocalRedirect(returnUrl);
220217
}
221218
}

src/Identity/test/Identity.FunctionalTests/RegistrationTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Threading.Tasks;
6+
using Identity.DefaultUI.WebSite;
67
using Microsoft.AspNetCore.Identity.UI.Services;
78
using Microsoft.EntityFrameworkCore;
89
using Microsoft.Extensions.DependencyInjection;
@@ -155,9 +156,10 @@ void ConfigureTestServices(IServiceCollection services)
155156
public async Task CanRegisterWithASocialLoginProviderFromLoginWithConfirmationAndRealEmailSender()
156157
{
157158
// Arrange
159+
var emailSender = new ContosoEmailSender();
158160
void ConfigureTestServices(IServiceCollection services)
159161
{
160-
services.AddSingleton<IEmailSender, FakeEmailSender>();
162+
services.SetupTestEmailSender(emailSender);
161163
services
162164
.Configure<IdentityOptions>(o => o.SignIn.RequireConfirmedAccount = true)
163165
.SetupTestThirdPartyLogin();
@@ -173,6 +175,7 @@ void ConfigureTestServices(IServiceCollection services)
173175

174176
// Act & Assert
175177
await UserStories.RegisterNewUserWithSocialLoginWithConfirmationAsync(client, userName, email, hasRealEmailSender: true);
178+
Assert.Single(emailSender.SentEmails);
176179
}
177180

178181
[Fact]

0 commit comments

Comments
 (0)