diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs
index ce08bebe87..5d1f6d8414 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs
@@ -13,8 +13,18 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
public string UserName { get; set; }
+ public string Name { get; set; }
+
+ public string SurName { get; set; }
+
public string Email { get; set; }
+ public bool EmailVerified { get; set; }
+
+ public string PhoneNumber { get; set; }
+
+ public bool PhoneNumberVerified { get; set; }
+
public string[] Roles { get; set; }
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
index 54815d6ff5..89bf3e7cfc 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
@@ -117,7 +117,12 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
Id = _currentUser.Id,
TenantId = _currentUser.TenantId,
UserName = _currentUser.UserName,
+ SurName = _currentUser.SurName,
+ Name = _currentUser.Name,
Email = _currentUser.Email,
+ EmailVerified = _currentUser.EmailVerified,
+ PhoneNumber = _currentUser.PhoneNumber,
+ PhoneNumberVerified = _currentUser.PhoneNumberVerified,
Roles = _currentUser.Roles
};
}
diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs
index d0b883e4f3..271d5d3d94 100644
--- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs
+++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs
@@ -13,6 +13,16 @@ namespace Volo.Abp.Security.Claims
///
public static string UserName { get; set; } = ClaimTypes.Name;
+ ///
+ /// Default:
+ ///
+ public static string Name { get; set; } = ClaimTypes.GivenName;
+
+ ///
+ /// Default:
+ ///
+ public static string SurName { get; set; } = ClaimTypes.Surname;
+
///
/// Default:
///
@@ -48,7 +58,6 @@ namespace Volo.Abp.Security.Claims
///
public static string TenantId { get; set; } = "tenantid";
-
///
/// Default: "editionid".
///
diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs
index 487274860f..e769b9ec11 100644
--- a/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs
+++ b/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs
@@ -17,6 +17,10 @@ namespace Volo.Abp.Users
public virtual string UserName => this.FindClaimValue(AbpClaimTypes.UserName);
+ public virtual string Name => this.FindClaimValue(AbpClaimTypes.Name);
+
+ public virtual string SurName => this.FindClaimValue(AbpClaimTypes.SurName);
+
public virtual string PhoneNumber => this.FindClaimValue(AbpClaimTypes.PhoneNumber);
public virtual bool PhoneNumberVerified => string.Equals(this.FindClaimValue(AbpClaimTypes.PhoneNumberVerified), "true", StringComparison.InvariantCultureIgnoreCase);
@@ -56,4 +60,4 @@ namespace Volo.Abp.Users
return FindClaims(AbpClaimTypes.Role).Any(c => c.Value == roleName);
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs
index 18613406d8..528f176c94 100644
--- a/framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs
+++ b/framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs
@@ -14,9 +14,15 @@ namespace Volo.Abp.Users
[CanBeNull]
string UserName { get; }
+ [CanBeNull]
+ string Name { get; }
+
+ [CanBeNull]
+ string SurName { get; }
+
[CanBeNull]
string PhoneNumber { get; }
-
+
bool PhoneNumberVerified { get; }
[CanBeNull]
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
index d21e945f60..6feddd125b 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
@@ -8,6 +8,7 @@ using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectExtending.Modularity;
+using Volo.Abp.Security.Claims;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
@@ -36,7 +37,7 @@ namespace Volo.Abp.Identity
options.EtoMappings.Add(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add(typeof(AbpIdentityDomainModule));
});
-
+
var identityBuilder = context.Services.AddAbpIdentity(options =>
{
options.User.RequireUniqueEmail = true;
@@ -45,6 +46,13 @@ namespace Volo.Abp.Identity
context.Services.AddObjectAccessor(identityBuilder);
context.Services.ExecutePreConfiguredActions(identityBuilder);
+ Configure(options =>
+ {
+ options.ClaimsIdentity.UserIdClaimType = AbpClaimTypes.UserId;
+ options.ClaimsIdentity.UserNameClaimType = AbpClaimTypes.UserName;
+ options.ClaimsIdentity.RoleClaimType = AbpClaimTypes.Role;
+ });
+
AddAbpIdentityOptionsFactory(context.Services);
}
@@ -67,7 +75,7 @@ namespace Volo.Abp.Identity
IdentityModuleExtensionConsts.EntityNames.ClaimType,
typeof(IdentityClaimType)
);
-
+
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
@@ -81,4 +89,4 @@ namespace Volo.Abp.Identity
services.Replace(ServiceDescriptor.Scoped, OptionsManager>());
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs
index 8db2b95942..c9e266bf23 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs
@@ -1,4 +1,5 @@
-using System.Linq;
+using System;
+using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
@@ -6,6 +7,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
using Volo.Abp.Uow;
+using Volo.Abp.Users;
namespace Volo.Abp.Identity
{
@@ -13,11 +15,11 @@ namespace Volo.Abp.Identity
{
public AbpUserClaimsPrincipalFactory(
UserManager userManager,
- RoleManager roleManager,
- IOptions options)
+ RoleManager roleManager,
+ IOptions options)
: base(
- userManager,
- roleManager,
+ userManager,
+ roleManager,
options)
{
}
@@ -26,14 +28,34 @@ namespace Volo.Abp.Identity
public override async Task CreateAsync(IdentityUser user)
{
var principal = await base.CreateAsync(user);
+ var identity = principal.Identities.First();
if (user.TenantId.HasValue)
{
- principal.Identities
- .First()
- .AddClaim(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
}
+ if (!user.Name.IsNullOrWhiteSpace())
+ {
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.Name, user.Name));
+ }
+ if (!user.Surname.IsNullOrWhiteSpace())
+ {
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.SurName, user.Surname));
+ }
+
+ if (!user.PhoneNumber.IsNullOrWhiteSpace())
+ {
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.PhoneNumber, user.PhoneNumber));
+ }
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.PhoneNumberVerified, user.PhoneNumberConfirmed.ToString()));
+
+ if (!user.Email.IsNullOrWhiteSpace())
+ {
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.Email, user.Email));
+ }
+ identity.AddIfNotContains(new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString()));
+
return principal;
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ClaimsIdentityExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ClaimsIdentityExtensions.cs
new file mode 100644
index 0000000000..156f092f9e
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ClaimsIdentityExtensions.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Linq;
+using System.Security.Claims;
+
+namespace Volo.Abp.Identity
+{
+ public static class ClaimsIdentityExtensions
+ {
+ public static ClaimsIdentity AddIfNotContains(this ClaimsIdentity claimsIdentity, Claim claim)
+ {
+ if (!claimsIdentity.Claims.Any(existClaim =>
+ existClaim != null &&
+ string.Equals(existClaim.Type, claim.Type, StringComparison.OrdinalIgnoreCase)))
+ {
+ claimsIdentity.AddClaim(claim);
+ }
+
+ return claimsIdentity;
+ }
+ }
+}