diff --git a/modules/account/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs b/modules/account/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs index 4a806b9ae2..f845b7f273 100644 --- a/modules/account/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs +++ b/modules/account/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Account.Localization; using Volo.Abp.Account.Web.Pages.Account; using Volo.Abp.Account.Web.ProfileManagement; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; @@ -21,6 +22,7 @@ namespace Volo.Abp.Account.Web typeof(AbpIdentityAspNetCoreModule), typeof(AbpAutoMapperModule), typeof(AbpAspNetCoreMvcUiThemeSharedModule), + typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpExceptionHandlingModule) )] public class AbpAccountWebModule : AbpModule diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs index c4461bd512..32f2398629 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs @@ -1,13 +1,19 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Volo.Abp.Account.Localization; using Volo.Abp.AspNetCore.ExceptionHandling; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.ExceptionHandling; using Volo.Abp.Identity; +using Volo.Abp.MultiTenancy; using IdentityUser = Volo.Abp.Identity.IdentityUser; namespace Volo.Abp.Account.Web.Pages.Account @@ -21,20 +27,48 @@ namespace Volo.Abp.Account.Web.Pages.Account public IOptions IdentityOptions { get; set; } public IExceptionToErrorInfoConverter ExceptionToErrorInfoConverter { get; set; } + public ITenantResolveResultAccessor TenantResolveResultAccessor { get; set; } + + public IOptions AspNetCoreMultiTenancyOptions { get; set; } + + public IOptions MultiTenancyOptions { get; set; } + protected AccountPageModel() { LocalizationResourceType = typeof(AccountResource); ObjectMapperContext = typeof(AbpAccountWebModule); } - protected virtual void CheckIdentityErrors(IdentityResult identityResult) + protected virtual bool SwitchTenant(Guid? tenantId) { - if (!identityResult.Succeeded) + if (MultiTenancyOptions.Value.IsEnabled && + TenantResolveResultAccessor.Result?.AppliedResolvers?.Contains(CookieTenantResolveContributor.ContributorName) == true) { - throw new UserFriendlyException("Operation failed: " + identityResult.Errors.Select(e => $"[{e.Code}] {e.Description}").JoinAsString(", ")); + if (CurrentTenant.Id != tenantId) + { + if (tenantId != null) + { + Response.Cookies.Append( + AspNetCoreMultiTenancyOptions.Value.TenantKey, + tenantId.ToString(), + new CookieOptions + { + Path = "/", + HttpOnly = false, + Expires = DateTimeOffset.Now.AddYears(10) + } + ); + } + else + { + Response.Cookies.Delete(AspNetCoreMultiTenancyOptions.Value.TenantKey); + } + + return true; + } } - //identityResult.CheckErrors(LocalizationManager); //TODO: Get from old Abp + return false; } protected virtual void CheckCurrentTenant(Guid? tenantId) @@ -45,6 +79,16 @@ namespace Volo.Abp.Account.Web.Pages.Account } } + protected virtual void CheckIdentityErrors(IdentityResult identityResult) + { + if (!identityResult.Succeeded) + { + throw new UserFriendlyException("Operation failed: " + identityResult.Errors.Select(e => $"[{e.Code}] {e.Description}").JoinAsString(", ")); + } + + //identityResult.CheckErrors(LocalizationManager); //TODO: Get from old Abp + } + protected virtual string GetLocalizeExceptionMessage(Exception exception) { if (exception is ILocalizeErrorMessage || exception is IHasErrorCode) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/ResetPassword.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/ResetPassword.cshtml.cs index 44317eaaa5..7067e186ef 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/ResetPassword.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/ResetPassword.cshtml.cs @@ -1,10 +1,10 @@ using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Auditing; using Volo.Abp.Identity; -using Volo.Abp.MultiTenancy; using Volo.Abp.Validation; namespace Volo.Abp.Account.Web.Pages.Account @@ -49,15 +49,13 @@ namespace Volo.Abp.Account.Web.Pages.Account [DisableAuditing] public string ConfirmPassword { get; set; } - protected virtual ITenantResolveResultAccessor TenantResolveResultAccessor { get; } - - public ResetPasswordModel(ITenantResolveResultAccessor tenantResolveResultAccessor) - { - TenantResolveResultAccessor = tenantResolveResultAccessor; - } - public virtual Task OnGetAsync() { + if (SwitchTenant(TenantId)) + { + return Task.FromResult(Redirect(HttpContext.Request.GetEncodedUrl())); + } + return Task.FromResult(Page()); } diff --git a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj index ac59aa33ba..da95a01a8a 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj +++ b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj @@ -35,6 +35,7 @@ +