Browse Source

Merge pull request #24942 from abpframework/AbpSignInManager-Change-Tenant

Switch to the user's tenant in `AbpSignInManager`.
pull/24945/head
Engincan VESKE 7 months ago
committed by GitHub
parent
commit
cc274c871d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 47
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs

47
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Settings; using Volo.Abp.Settings;
namespace Volo.Abp.Identity.AspNetCore; namespace Volo.Abp.Identity.AspNetCore;
@ -12,10 +13,9 @@ namespace Volo.Abp.Identity.AspNetCore;
public class AbpSignInManager : SignInManager<IdentityUser> public class AbpSignInManager : SignInManager<IdentityUser>
{ {
protected AbpIdentityOptions AbpOptions { get; } protected AbpIdentityOptions AbpOptions { get; }
protected ISettingProvider SettingProvider { get; } protected ISettingProvider SettingProvider { get; }
protected IdentityUserManager IdentityUserManager { get; }
private readonly IdentityUserManager _identityUserManager; protected ICurrentTenant CurrentTenant { get; }
public AbpSignInManager( public AbpSignInManager(
IdentityUserManager userManager, IdentityUserManager userManager,
@ -26,7 +26,8 @@ public class AbpSignInManager : SignInManager<IdentityUser>
IAuthenticationSchemeProvider schemes, IAuthenticationSchemeProvider schemes,
IUserConfirmation<IdentityUser> confirmation, IUserConfirmation<IdentityUser> confirmation,
IOptions<AbpIdentityOptions> options, IOptions<AbpIdentityOptions> options,
ISettingProvider settingProvider) : base( ISettingProvider settingProvider,
ICurrentTenant currentTenant) : base(
userManager, userManager,
contextAccessor, contextAccessor,
claimsFactory, claimsFactory,
@ -35,9 +36,10 @@ public class AbpSignInManager : SignInManager<IdentityUser>
schemes, schemes,
confirmation) confirmation)
{ {
SettingProvider = settingProvider;
AbpOptions = options.Value; AbpOptions = options.Value;
_identityUserManager = userManager; SettingProvider = settingProvider;
IdentityUserManager = userManager;
CurrentTenant = currentTenant;
} }
public override async Task<SignInResult> PasswordSignInAsync( public override async Task<SignInResult> PasswordSignInAsync(
@ -68,17 +70,23 @@ public class AbpSignInManager : SignInManager<IdentityUser>
} }
else else
{ {
if (externalLoginProvider is IExternalLoginProviderWithPassword externalLoginProviderWithPassword) using (CurrentTenant.Change(user.TenantId))
{
await externalLoginProviderWithPassword.UpdateUserAsync(user, externalLoginProviderInfo.Name, password);
}
else
{ {
await externalLoginProvider.UpdateUserAsync(user, externalLoginProviderInfo.Name); if (externalLoginProvider is IExternalLoginProviderWithPassword externalLoginProviderWithPassword)
{
await externalLoginProviderWithPassword.UpdateUserAsync(user, externalLoginProviderInfo.Name, password);
}
else
{
await externalLoginProvider.UpdateUserAsync(user, externalLoginProviderInfo.Name);
}
} }
} }
return await SignInOrTwoFactorAsync(user, isPersistent); using (CurrentTenant.Change(user.TenantId))
{
return await SignInOrTwoFactorAsync(user, isPersistent);
}
} }
} }
@ -88,7 +96,10 @@ public class AbpSignInManager : SignInManager<IdentityUser>
return SignInResult.Failed; return SignInResult.Failed;
} }
return await PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure); using (CurrentTenant.Change(user.TenantId))
{
return await PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure);
}
} }
public override async Task<SignInResult> ExternalLoginSignInAsync(string loginProvider, string providerKey, bool isPersistent, bool bypassTwoFactor) public override async Task<SignInResult> ExternalLoginSignInAsync(string loginProvider, string providerKey, bool isPersistent, bool bypassTwoFactor)
@ -109,17 +120,17 @@ public class AbpSignInManager : SignInManager<IdentityUser>
public virtual async Task<IdentityUser> FindByEmailAsync(string email) public virtual async Task<IdentityUser> FindByEmailAsync(string email)
{ {
return await _identityUserManager.FindSharedUserByEmailAsync(email); return await IdentityUserManager.FindSharedUserByEmailAsync(email);
} }
public virtual async Task<IdentityUser> FindByNameAsync(string userName) public virtual async Task<IdentityUser> FindByNameAsync(string userName)
{ {
return await _identityUserManager.FindSharedUserByNameAsync(userName); return await IdentityUserManager.FindSharedUserByNameAsync(userName);
} }
public virtual async Task<IdentityUser> FindByLoginAsync(string loginProvider, string providerKey) public virtual async Task<IdentityUser> FindByLoginAsync(string loginProvider, string providerKey)
{ {
return await _identityUserManager.FindSharedUserByLoginAsync(loginProvider, providerKey); return await IdentityUserManager.FindSharedUserByLoginAsync(loginProvider, providerKey);
} }
/// <summary> /// <summary>
@ -146,7 +157,7 @@ public class AbpSignInManager : SignInManager<IdentityUser>
return SignInResult.NotAllowed; return SignInResult.NotAllowed;
} }
if (await _identityUserManager.ShouldPeriodicallyChangePasswordAsync(user)) if (await IdentityUserManager.ShouldPeriodicallyChangePasswordAsync(user))
{ {
return SignInResult.NotAllowed; return SignInResult.NotAllowed;
} }

Loading…
Cancel
Save