mirror of https://github.com/abpframework/abp.git
committed by
GitHub
41 changed files with 259 additions and 88 deletions
@ -1,8 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; |
|||
|
|||
public interface IAbpMauiAccessTokenProvider |
|||
{ |
|||
Task<string> GetAccessTokenAsync(); |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Http.Client.Authentication; |
|||
|
|||
namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; |
|||
|
|||
[Dependency(ReplaceServices = true)] |
|||
public class MauiBlazorAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency |
|||
{ |
|||
public virtual Task<string> GetTokenAsync() |
|||
{ |
|||
return Task.FromResult(null as string); |
|||
} |
|||
} |
|||
@ -1,13 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; |
|||
|
|||
[Dependency(TryRegister = true)] |
|||
public class NullAbpMauiAccessTokenProvider : IAbpMauiAccessTokenProvider |
|||
{ |
|||
public Task<string> GetAccessTokenAsync() |
|||
{ |
|||
return Task.FromResult(null as string); |
|||
} |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Authentication; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Http.Client.Authentication; |
|||
|
|||
namespace Volo.Abp.Http.Client.IdentityModel.Web; |
|||
|
|||
[Dependency(ReplaceServices = true)] |
|||
public class HttpContextAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency |
|||
{ |
|||
protected IHttpContextAccessor HttpContextAccessor { get; } |
|||
|
|||
public HttpContextAbpAccessTokenProvider(IHttpContextAccessor httpContextAccessor) |
|||
{ |
|||
HttpContextAccessor = httpContextAccessor; |
|||
} |
|||
|
|||
public virtual async Task<string> GetTokenAsync() |
|||
{ |
|||
var httpContext = HttpContextAccessor?.HttpContext; |
|||
if (httpContext == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return await httpContext.GetTokenAsync("access_token"); |
|||
} |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Components.WebAssembly.Authentication; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Http.Client.Authentication; |
|||
|
|||
namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly; |
|||
|
|||
[Dependency(ReplaceServices = true)] |
|||
public class WebAssemblyAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency |
|||
{ |
|||
protected IAccessTokenProvider AccessTokenProvider { get; } |
|||
|
|||
public WebAssemblyAbpAccessTokenProvider(IAccessTokenProvider accessTokenProvider) |
|||
{ |
|||
AccessTokenProvider = accessTokenProvider; |
|||
} |
|||
|
|||
public virtual async Task<string> GetTokenAsync() |
|||
{ |
|||
if (AccessTokenProvider == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
var result = await AccessTokenProvider.RequestAccessToken(); |
|||
if (result.Status != AccessTokenResultStatus.Success) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
result.TryGetToken(out var token); |
|||
return token.Value; |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.Http.Client.Authentication; |
|||
|
|||
public interface IAbpAccessTokenProvider |
|||
{ |
|||
Task<string> GetTokenAsync(); |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.Abp.Http.Client.Authentication; |
|||
|
|||
public class NullAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency |
|||
{ |
|||
public Task<string> GetTokenAsync() |
|||
{ |
|||
return Task.FromResult(null as string); |
|||
} |
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Identity; |
|||
using Microsoft.Extensions.Localization; |
|||
using Volo.Abp.Identity.Localization; |
|||
|
|||
namespace Volo.Abp.Identity |
|||
{ |
|||
public class AbpIdentityUserValidator : IUserValidator<IdentityUser> |
|||
{ |
|||
protected IStringLocalizer<IdentityResource> Localizer { get; } |
|||
|
|||
public AbpIdentityUserValidator(IStringLocalizer<IdentityResource> localizer) |
|||
{ |
|||
Localizer = localizer; |
|||
} |
|||
|
|||
public virtual async Task<IdentityResult> ValidateAsync(UserManager<IdentityUser> manager, IdentityUser user) |
|||
{ |
|||
var describer = new IdentityErrorDescriber(); |
|||
|
|||
Check.NotNull(manager, nameof(manager)); |
|||
Check.NotNull(user, nameof(user)); |
|||
|
|||
var errors = new List<IdentityError>(); |
|||
|
|||
var userName = await manager.GetUserNameAsync(user); |
|||
if (userName == null) |
|||
{ |
|||
errors.Add(describer.InvalidUserName(null)); |
|||
} |
|||
else |
|||
{ |
|||
var owner = await manager.FindByEmailAsync(userName); |
|||
if (owner != null && !string.Equals(await manager.GetUserIdAsync(owner), await manager.GetUserIdAsync(user))) |
|||
{ |
|||
errors.Add(new IdentityError |
|||
{ |
|||
Code = "InvalidUserName", |
|||
Description = Localizer["InvalidUserName", userName] |
|||
}); |
|||
} |
|||
} |
|||
|
|||
return errors.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.Localization; |
|||
using Shouldly; |
|||
using Volo.Abp.Identity.Localization; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.Identity.AspNetCore; |
|||
|
|||
public class AbpIdentityUserValidator_Tests : AbpIdentityAspNetCoreTestBase |
|||
{ |
|||
private readonly IdentityUserManager _identityUserManager; |
|||
private readonly IStringLocalizer<IdentityResource> Localizer; |
|||
|
|||
public AbpIdentityUserValidator_Tests() |
|||
{ |
|||
_identityUserManager = GetRequiredService<IdentityUserManager>(); |
|||
Localizer = GetRequiredService<IStringLocalizer<IdentityResource>>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Can_Not_Use_Another_Users_Email_As_Your_Username_Test() |
|||
{ |
|||
var user1 = new IdentityUser(Guid.NewGuid(), "user1", "user1@volosoft.com"); |
|||
var identityResult = await _identityUserManager.CreateAsync(user1); |
|||
identityResult.Succeeded.ShouldBeTrue(); |
|||
|
|||
var user2 = new IdentityUser(Guid.NewGuid(), "user1@volosoft.com", "user2@volosoft.com"); |
|||
identityResult = await _identityUserManager.CreateAsync(user2); |
|||
identityResult.Succeeded.ShouldBeFalse(); |
|||
identityResult.Errors.Count().ShouldBe(1); |
|||
identityResult.Errors.First().Code.ShouldBe("InvalidUserName"); |
|||
identityResult.Errors.First().Description.ShouldBe(Localizer["InvalidUserName", "user1@volosoft.com"]); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue