Browse Source

Fix ExternalLoginProviderBase

pull/4979/head
Halil İbrahim Kalkan 6 years ago
parent
commit
d12ef80a9d
  1. 9
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/ExternalLoginProviderBase.cs
  2. 40
      modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs
  3. 18
      modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs

9
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/ExternalLoginProviderBase.cs

@ -2,6 +2,7 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
@ -14,16 +15,20 @@ namespace Volo.Abp.Identity.AspNetCore
protected IdentityUserManager UserManager { get; }
protected RandomPasswordGenerator RandomPasswordGenerator { get; }
protected IIdentityUserRepository IdentityUserRepository { get; }
protected ExternalLoginProviderBase(
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant,
IdentityUserManager userManager,
RandomPasswordGenerator randomPasswordGenerator)
RandomPasswordGenerator randomPasswordGenerator,
IIdentityUserRepository identityUserRepository)
{
GuidGenerator = guidGenerator;
CurrentTenant = currentTenant;
UserManager = userManager;
RandomPasswordGenerator = randomPasswordGenerator;
IdentityUserRepository = identityUserRepository;
}
public abstract Task<bool> TryAuthenticateAsync(string userName, string plainPassword);
@ -113,6 +118,8 @@ namespace Volo.Abp.Identity.AspNetCore
(await UserManager.SetTwoFactorEnabledAsync(user, externalUser.TwoFactorEnabled.Value)).CheckErrors();
}
await IdentityUserRepository.EnsureCollectionLoadedAsync(user, u => u.Logins);
var userLogin = user.Logins.FirstOrDefault(l => l.LoginProvider == providerName);
if (userLogin != null)
{

40
modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Linq;
using System.Threading.Tasks;
using Shouldly;
using Xunit;
@ -9,11 +10,48 @@ namespace Volo.Abp.Identity.AspNetCore
[Fact]
public async Task Should_SignIn_With_ExternalLoginProvider()
{
// User does not exists yet
(await GetRequiredService<IdentityUserManager>().FindByNameAsync("ext_user")).ShouldBeNull();
// Try to login
var result = await GetResponseAsStringAsync(
"api/signin-test/password?userName=ext_user&password=abc"
);
result.ShouldBe("Succeeded");
// User should be created now
await CheckUserAsync();
// Re-login
result = await GetResponseAsStringAsync(
"api/signin-test/password?userName=ext_user&password=abc"
);
result.ShouldBe("Succeeded");
await CheckUserAsync();
}
private async Task CheckUserAsync()
{
var userRepository = GetRequiredService<IIdentityUserRepository>();
var user = await userRepository.FindByNormalizedUserNameAsync("EXT_USER");
user.Name.ShouldBe("Test Name");
user.Surname.ShouldBe("Test Surname");
user.EmailConfirmed.ShouldBeTrue();
user.TwoFactorEnabled.ShouldBeFalse();
user.PhoneNumber.ShouldBe("123");
user.PhoneNumberConfirmed.ShouldBeFalse();
user.LoginProvider.ShouldBe("Fake");
var logins = user.Logins.Where(l => l.LoginProvider == "Fake").ToList();
logins.Count.ShouldBe(1);
logins[0].ProviderKey.ShouldBe("123");
}
}
}

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

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
@ -13,8 +14,14 @@ namespace Volo.Abp.Identity.AspNetCore
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant,
IdentityUserManager userManager,
RandomPasswordGenerator randomPasswordGenerator)
: base(guidGenerator, currentTenant, userManager, randomPasswordGenerator)
RandomPasswordGenerator randomPasswordGenerator,
IIdentityUserRepository identityUserRepository)
: base(
guidGenerator,
currentTenant,
userManager,
randomPasswordGenerator,
identityUserRepository)
{
}
@ -28,7 +35,10 @@ namespace Volo.Abp.Identity.AspNetCore
protected override Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName)
{
// The only required property is the email, which is set in the constructor.
if (userName != "ext_user")
{
throw new ArgumentException();
}
return Task.FromResult(
new ExternalLoginUserInfo("ext_user@test.com")

Loading…
Cancel
Save