Browse Source

Refactor

pull/12712/head
liangshiwei 4 years ago
parent
commit
4fbac36075
  1. 6
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs
  2. 34
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs
  3. 49
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderWithPasswordBase.cs
  4. 6
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs
  5. 5
      modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs

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

@ -49,8 +49,7 @@ public class AbpSignInManager : SignInManager<IdentityUser>
var user = await UserManager.FindByNameAsync(userName);
if (user == null)
{
if (!externalLoginProvider.CanObtainUserInfoWithoutPassword() &&
externalLoginProvider is IExternalLoginProviderWithPassword externalLoginProviderWithPassword)
if (externalLoginProvider is IExternalLoginProviderWithPassword externalLoginProviderWithPassword)
{
user = await externalLoginProviderWithPassword.CreateUserAsync(userName, externalLoginProviderInfo.Name, password);
}
@ -61,8 +60,7 @@ public class AbpSignInManager : SignInManager<IdentityUser>
}
else
{
if (!externalLoginProvider.CanObtainUserInfoWithoutPassword() &&
externalLoginProvider is IExternalLoginProviderWithPassword externalLoginProviderWithPassword)
if (externalLoginProvider is IExternalLoginProviderWithPassword externalLoginProviderWithPassword)
{
await externalLoginProviderWithPassword.UpdateUserAsync(user, externalLoginProviderInfo.Name, password);
}

34
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs

@ -9,7 +9,7 @@ using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity;
public abstract class ExternalLoginProviderBase : IExternalLoginProvider, IExternalLoginProviderWithPassword
public abstract class ExternalLoginProviderBase : IExternalLoginProvider
{
protected IGuidGenerator GuidGenerator { get; }
protected ICurrentTenant CurrentTenant { get; }
@ -30,11 +30,6 @@ public abstract class ExternalLoginProviderBase : IExternalLoginProvider, IExter
IdentityOptions = identityOptions;
}
public virtual bool CanObtainUserInfoWithoutPassword()
{
return true;
}
public abstract Task<bool> TryAuthenticateAsync(string userName, string plainPassword);
public abstract Task<bool> IsEnabledAsync();
@ -47,15 +42,6 @@ public abstract class ExternalLoginProviderBase : IExternalLoginProvider, IExter
return await CreateUserAsync(externalUser, userName, providerName);
}
public virtual async Task<IdentityUser> CreateUserAsync(string userName, string providerName, string plainPassword)
{
await IdentityOptions.SetAsync();
var externalUser = await GetUserInfoAsync(userName, plainPassword);
return await CreateUserAsync(externalUser, userName, providerName);
}
protected virtual async Task<IdentityUser> CreateUserAsync(ExternalLoginUserInfo externalUser, string userName, string providerName)
{
@ -105,16 +91,7 @@ public abstract class ExternalLoginProviderBase : IExternalLoginProvider, IExter
await UpdateUserAsync(user, externalUser, providerName);
}
public virtual async Task UpdateUserAsync(IdentityUser user, string providerName, string plainPassword)
{
await IdentityOptions.SetAsync();
var externalUser = await GetUserInfoAsync(user, plainPassword);
await UpdateUserAsync(user, externalUser, providerName);
}
protected virtual async Task UpdateUserAsync(IdentityUser user, ExternalLoginUserInfo externalUser ,string providerName)
{
NormalizeExternalLoginUserInfo(externalUser, user.UserName);
@ -181,17 +158,10 @@ public abstract class ExternalLoginProviderBase : IExternalLoginProvider, IExter
protected abstract Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName);
protected abstract Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName, string plainPassword);
protected virtual Task<ExternalLoginUserInfo> GetUserInfoAsync(IdentityUser user)
{
return GetUserInfoAsync(user.UserName);
}
protected virtual Task<ExternalLoginUserInfo> GetUserInfoAsync(IdentityUser user, string plainPassword)
{
return GetUserInfoAsync(user.UserName, plainPassword);
}
private static void NormalizeExternalLoginUserInfo(
ExternalLoginUserInfo externalUser,

49
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderWithPasswordBase.cs

@ -0,0 +1,49 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity;
public abstract class ExternalLoginProviderWithPasswordBase : ExternalLoginProviderBase, IExternalLoginProviderWithPassword
{
public ExternalLoginProviderWithPasswordBase(
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant,
IdentityUserManager userManager,
IIdentityUserRepository identityUserRepository,
IOptions<IdentityOptions> identityOptions) :
base(guidGenerator,
currentTenant,
userManager,
identityUserRepository,
identityOptions)
{
}
public async Task<IdentityUser> CreateUserAsync(string userName, string providerName, string plainPassword)
{
await IdentityOptions.SetAsync();
var externalUser = await GetUserInfoAsync(userName, plainPassword);
return await CreateUserAsync(externalUser, userName, providerName);
}
public async Task UpdateUserAsync(IdentityUser user, string providerName, string plainPassword)
{
await IdentityOptions.SetAsync();
var externalUser = await GetUserInfoAsync(user, plainPassword);
await UpdateUserAsync(user, externalUser, providerName);
}
protected abstract Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName, string plainPassword);
protected virtual Task<ExternalLoginUserInfo> GetUserInfoAsync(IdentityUser user, string plainPassword)
{
return GetUserInfoAsync(user.UserName, plainPassword);
}
}

6
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs

@ -4,8 +4,6 @@ namespace Volo.Abp.Identity;
public interface IExternalLoginProvider
{
bool CanObtainUserInfoWithoutPassword();
/// <summary>
/// Used to try authenticate a user by this source.
/// </summary>
@ -30,10 +28,10 @@ public interface IExternalLoginProvider
/// <param name="providerName">The name of this provider</param>
/// <param name="user">The user that can be updated</param>
Task UpdateUserAsync(IdentityUser user, string providerName);
/// <summary>
/// Return a value indicating whether this source is enabled.
/// </summary>
/// <returns></returns>
Task<bool> IsEnabledAsync();
}
}

5
modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs

@ -60,9 +60,4 @@ public class FakeExternalLoginProvider : ExternalLoginProviderBase, ITransientDe
}
);
}
protected override Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName, string plainPassword)
{
return GetUserInfoAsync(userName);
}
}

Loading…
Cancel
Save