Browse Source

Need to change the options before using IdentityOptions

pull/172/head
cKey 5 years ago
parent
commit
822a5e3654
  1. 10
      aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs
  2. 8
      aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application/LINGYUN/Abp/Identity/IdentityUserAppService.cs
  3. 7
      aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application/LINGYUN/Abp/Identity/MyProfileAppService.cs

10
aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs

@ -30,8 +30,8 @@ namespace LINGYUN.Abp.Account
protected IIdentityUserRepository UserRepository { get; } protected IIdentityUserRepository UserRepository { get; }
protected IUserSecurityCodeSender SecurityCodeSender { get; } protected IUserSecurityCodeSender SecurityCodeSender { get; }
protected IWeChatOpenIdFinder WeChatOpenIdFinder { get; } protected IWeChatOpenIdFinder WeChatOpenIdFinder { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
protected AbpWeChatMiniProgramOptionsFactory MiniProgramOptionsFactory { get; } protected AbpWeChatMiniProgramOptionsFactory MiniProgramOptionsFactory { get; }
protected IDistributedCache<SmsSecurityTokenCacheItem> SecurityTokenCache { get; } protected IDistributedCache<SmsSecurityTokenCacheItem> SecurityTokenCache { get; }
public AccountAppService( public AccountAppService(
@ -42,7 +42,8 @@ namespace LINGYUN.Abp.Account
IIdentityUserRepository userRepository, IIdentityUserRepository userRepository,
IUserSecurityCodeSender securityCodeSender, IUserSecurityCodeSender securityCodeSender,
IDistributedCache<SmsSecurityTokenCacheItem> securityTokenCache, IDistributedCache<SmsSecurityTokenCacheItem> securityTokenCache,
AbpWeChatMiniProgramOptionsFactory miniProgramOptionsFactory) AbpWeChatMiniProgramOptionsFactory miniProgramOptionsFactory,
IOptions<IdentityOptions> identityOptions)
{ {
TotpService = totpService; TotpService = totpService;
UserStore = userStore; UserStore = userStore;
@ -52,6 +53,7 @@ namespace LINGYUN.Abp.Account
SecurityCodeSender = securityCodeSender; SecurityCodeSender = securityCodeSender;
SecurityTokenCache = securityTokenCache; SecurityTokenCache = securityTokenCache;
MiniProgramOptionsFactory = miniProgramOptionsFactory; MiniProgramOptionsFactory = miniProgramOptionsFactory;
IdentityOptions = identityOptions;
LocalizationResource = typeof(AccountResource); LocalizationResource = typeof(AccountResource);
} }
@ -59,7 +61,9 @@ namespace LINGYUN.Abp.Account
public virtual async Task RegisterAsync(WeChatRegisterDto input) public virtual async Task RegisterAsync(WeChatRegisterDto input)
{ {
ThowIfInvalidEmailAddress(input.EmailAddress); ThowIfInvalidEmailAddress(input.EmailAddress);
await CheckSelfRegistrationAsync(); await CheckSelfRegistrationAsync();
await IdentityOptions.SetAsync();
var options = await MiniProgramOptionsFactory.CreateAsync(); var options = await MiniProgramOptionsFactory.CreateAsync();
@ -130,6 +134,7 @@ namespace LINGYUN.Abp.Account
public virtual async Task RegisterAsync(PhoneRegisterDto input) public virtual async Task RegisterAsync(PhoneRegisterDto input)
{ {
await CheckSelfRegistrationAsync(); await CheckSelfRegistrationAsync();
await IdentityOptions.SetAsync();
await CheckNewUserPhoneNumberNotBeUsedAsync(input.PhoneNumber); await CheckNewUserPhoneNumberNotBeUsedAsync(input.PhoneNumber);
var securityTokenCacheKey = SmsSecurityTokenCacheItem.CalculateCacheKey(input.PhoneNumber, "SmsVerifyCode"); var securityTokenCacheKey = SmsSecurityTokenCacheItem.CalculateCacheKey(input.PhoneNumber, "SmsVerifyCode");
@ -223,6 +228,7 @@ namespace LINGYUN.Abp.Account
{ {
throw new UserFriendlyException(L["InvalidSmsVerifyCode"]); throw new UserFriendlyException(L["InvalidSmsVerifyCode"]);
} }
await IdentityOptions.SetAsync();
// 传递 isConfirmed 用户必须是已确认过手机号的 // 传递 isConfirmed 用户必须是已确认过手机号的
var user = await GetUserByPhoneNumberAsync(input.PhoneNumber, isConfirmed: true); var user = await GetUserByPhoneNumberAsync(input.PhoneNumber, isConfirmed: true);
// 验证二次认证码 // 验证二次认证码

8
aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application/LINGYUN/Abp/Identity/IdentityUserAppService.cs

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -15,10 +16,13 @@ namespace LINGYUN.Abp.Identity
public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppService public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppService
{ {
protected IdentityUserManager UserManager { get; } protected IdentityUserManager UserManager { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
public IdentityUserAppService( public IdentityUserAppService(
IdentityUserManager userManager) IdentityUserManager userManager,
IOptions<IdentityOptions> identityOptions)
{ {
UserManager = userManager; UserManager = userManager;
IdentityOptions = identityOptions;
} }
#region OrganizationUnit #region OrganizationUnit
@ -106,6 +110,7 @@ namespace LINGYUN.Abp.Identity
[Authorize(Volo.Abp.Identity.IdentityPermissions.Users.Update)] [Authorize(Volo.Abp.Identity.IdentityPermissions.Users.Update)]
public virtual async Task ChangePasswordAsync(Guid id, ChangePasswordInput input) public virtual async Task ChangePasswordAsync(Guid id, ChangePasswordInput input)
{ {
await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(id); var user = await UserManager.GetByIdAsync(id);
if (user.IsExternal) if (user.IsExternal)
@ -126,6 +131,7 @@ namespace LINGYUN.Abp.Identity
[Authorize(Volo.Abp.Identity.IdentityPermissions.Users.Update)] [Authorize(Volo.Abp.Identity.IdentityPermissions.Users.Update)]
public virtual async Task ChangeTwoFactorEnabledAsync(Guid id, ChangeTwoFactorEnabledDto input) public virtual async Task ChangeTwoFactorEnabledAsync(Guid id, ChangeTwoFactorEnabledDto input)
{ {
await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(id); var user = await UserManager.GetByIdAsync(id);
(await UserManager.SetTwoFactorEnabledWithAccountConfirmedAsync(user, input.Enabled)).CheckErrors(); (await UserManager.SetTwoFactorEnabledWithAccountConfirmedAsync(user, input.Enabled)).CheckErrors();

7
aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application/LINGYUN/Abp/Identity/MyProfileAppService.cs

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Options;
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp; using Volo.Abp;
@ -19,15 +20,18 @@ namespace LINGYUN.Abp.Identity
protected IUserSecurityCodeSender SecurityCodeSender { get; } protected IUserSecurityCodeSender SecurityCodeSender { get; }
protected IdentityUserManager UserManager { get; } protected IdentityUserManager UserManager { get; }
protected IIdentityUserRepository UserRepository { get; } protected IIdentityUserRepository UserRepository { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
public MyProfileAppService( public MyProfileAppService(
IdentityUserManager userManager, IdentityUserManager userManager,
IIdentityUserRepository userRepository, IIdentityUserRepository userRepository,
IUserSecurityCodeSender securityCodeSender, IUserSecurityCodeSender securityCodeSender,
IOptions<IdentityOptions> identityOptions,
IDistributedCache<SmsSecurityTokenCacheItem> securityTokenCache) IDistributedCache<SmsSecurityTokenCacheItem> securityTokenCache)
{ {
UserManager = userManager; UserManager = userManager;
UserRepository = userRepository; UserRepository = userRepository;
IdentityOptions = identityOptions;
SecurityCodeSender = securityCodeSender; SecurityCodeSender = securityCodeSender;
SecurityTokenCache = securityTokenCache; SecurityTokenCache = securityTokenCache;
} }
@ -38,7 +42,7 @@ namespace LINGYUN.Abp.Identity
{ {
throw new BusinessException(Volo.Abp.Identity.IdentityErrorCodes.CanNotChangeTwoFactor); throw new BusinessException(Volo.Abp.Identity.IdentityErrorCodes.CanNotChangeTwoFactor);
} }
await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(CurrentUser.GetId()); var user = await UserManager.GetByIdAsync(CurrentUser.GetId());
(await UserManager.SetTwoFactorEnabledWithAccountConfirmedAsync(user, input.Enabled)).CheckErrors(); (await UserManager.SetTwoFactorEnabledWithAccountConfirmedAsync(user, input.Enabled)).CheckErrors();
@ -83,6 +87,7 @@ namespace LINGYUN.Abp.Identity
{ {
throw new BusinessException(IdentityErrorCodes.DuplicatePhoneNumber); throw new BusinessException(IdentityErrorCodes.DuplicatePhoneNumber);
} }
await IdentityOptions.SetAsync();
//TODO: 可以查询缓存用 securityTokenCacheItem.SecurityToken 与 user.SecurityStamp 作对比 //TODO: 可以查询缓存用 securityTokenCacheItem.SecurityToken 与 user.SecurityStamp 作对比
var user = await UserManager.GetByIdAsync(CurrentUser.GetId()); var user = await UserManager.GetByIdAsync(CurrentUser.GetId());
// 更换手机号 // 更换手机号

Loading…
Cancel
Save