From f6113db0fc9da3579b200121fc2d7234012d9e96 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Thu, 12 Jan 2023 10:56:14 +0100 Subject: [PATCH] Re-introduce the option to conditionally login members after registration (#13659) * Re-introduce the option to conditionally login members after registration * Make absolutely sure the default is true for automatic member login after registration --- .../EmbeddedResources/Snippets/RegisterMember.cshtml | 6 +++++- .../Controllers/UmbRegisterController.cs | 11 ++++++++--- src/Umbraco.Web.Website/Models/RegisterModel.cs | 6 ++++++ .../Models/RegisterModelBuilder.cs | 8 ++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Snippets/RegisterMember.cshtml b/src/Umbraco.Core/EmbeddedResources/Snippets/RegisterMember.cshtml index ca45ff5746..f3b9e31254 100644 --- a/src/Umbraco.Core/EmbeddedResources/Snippets/RegisterMember.cshtml +++ b/src/Umbraco.Core/EmbeddedResources/Snippets/RegisterMember.cshtml @@ -18,6 +18,9 @@ // Set to true if you want the member editable properties shown. // It will only displays properties marked as "Member can edit" on the "Info" tab of the Member Type. .WithCustomProperties(false) + // By default the member will be logged in automatically after registration. + // Set this to false if the member should not be logged in automatically. + .WithAutomaticLogIn(true) .Build(); var success = TempData["FormSuccess"] != null; @@ -39,7 +42,8 @@ else new { MemberTypeAlias = registerModel.MemberTypeAlias, UsernameIsEmail = registerModel.UsernameIsEmail, - RedirectUrl = registerModel.RedirectUrl + RedirectUrl = registerModel.RedirectUrl, + AutomaticLogIn = registerModel.AutomaticLogIn })) {

Create a new account.

diff --git a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs index 9261b356f8..493dd624d1 100644 --- a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs +++ b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs @@ -95,6 +95,12 @@ public class UmbRegisterController : SurfaceController { model.UsernameIsEmail = usernameIsEmail.ToString() == "True"; } + + if (RouteData.Values.TryGetValue(nameof(RegisterModel.AutomaticLogIn), out var automaticLogin) && + automaticLogin != null) + { + model.AutomaticLogIn = automaticLogin.ToString() == "True"; + } } private void AddErrors(IdentityResult result) @@ -109,9 +115,8 @@ public class UmbRegisterController : SurfaceController /// Registers a new member. /// /// Register member model. - /// Flag for whether to log the member in upon successful registration. /// Result of registration operation. - private async Task RegisterMemberAsync(RegisterModel model, bool logMemberIn = true) + private async Task RegisterMemberAsync(RegisterModel model) { using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); @@ -149,7 +154,7 @@ public class UmbRegisterController : SurfaceController _memberService.Save(member); - if (logMemberIn) + if (model.AutomaticLogIn) { await _memberSignInManager.SignInAsync(identityUser, false); } diff --git a/src/Umbraco.Web.Website/Models/RegisterModel.cs b/src/Umbraco.Web.Website/Models/RegisterModel.cs index 3717ef3e7d..3e23d4d002 100644 --- a/src/Umbraco.Web.Website/Models/RegisterModel.cs +++ b/src/Umbraco.Web.Website/Models/RegisterModel.cs @@ -13,6 +13,7 @@ public class RegisterModel : PostRedirectModel MemberTypeAlias = Constants.Conventions.MemberTypes.DefaultAlias; UsernameIsEmail = true; MemberProperties = new List(); + AutomaticLogIn = true; } [Required] @@ -59,4 +60,9 @@ public class RegisterModel : PostRedirectModel /// Flag to determine if the username should be the email address, if true then the Username property is ignored /// public bool UsernameIsEmail { get; set; } + + /// + /// Flag to determine if the member should be logged in automatically after successful registration + /// + public bool AutomaticLogIn { get; set; } } diff --git a/src/Umbraco.Web.Website/Models/RegisterModelBuilder.cs b/src/Umbraco.Web.Website/Models/RegisterModelBuilder.cs index b3736e63e8..0b3e73fe73 100644 --- a/src/Umbraco.Web.Website/Models/RegisterModelBuilder.cs +++ b/src/Umbraco.Web.Website/Models/RegisterModelBuilder.cs @@ -14,6 +14,7 @@ public class RegisterModelBuilder : MemberModelBuilderBase private string? _memberTypeAlias; private string? _redirectUrl; private bool _usernameIsEmail; + private bool _automaticLogIn = true; public RegisterModelBuilder(IMemberTypeService memberTypeService, IShortStringHelper shortStringHelper) : base(memberTypeService, shortStringHelper) @@ -44,6 +45,12 @@ public class RegisterModelBuilder : MemberModelBuilderBase return this; } + public RegisterModelBuilder WithAutomaticLogIn(bool automaticLogIn = true) + { + _automaticLogIn = automaticLogIn; + return this; + } + public RegisterModel Build() { var providedOrDefaultMemberTypeAlias = _memberTypeAlias ?? Constants.Conventions.MemberTypes.DefaultAlias; @@ -62,6 +69,7 @@ public class RegisterModelBuilder : MemberModelBuilderBase MemberProperties = _lookupProperties ? GetMemberPropertiesViewModel(memberType) : Enumerable.Empty().ToList(), + AutomaticLogIn = _automaticLogIn }; return model; }