asp.net身份-有条件地检查RequireConfirmedPhoneNumber



我的中间件方法目前有一个可配置的选项"IdentityOptions.SignIn.RequireConfirmedPhoneNumber",导致未确认电话号码时,CheckPasswordSignInAsync方法返回IsNotAllowed = true

我希望这个检查(RequireConfirmedPhoneNumber)是有条件的,所以它只在提供电话号码时启动。

为了实现这一点,我重写了CheckPasswordSignInAsync方法:
public override async Task<SignInResult> CheckPasswordSignInAsync(ApplicationUser user, string password, bool lockoutOnFailure)
{
bool confirmedNumberRequiredAlways = true; // comes from config
bool confirmedNumberRequiredIfProvided = true; // comes from config
base.Options.SignIn.RequireConfirmedPhoneNumber = confirmedNumberRequiredAlways
|| confirmedNumberRequiredIfProvided && !string.IsNullOrWhiteSpace(user.PhoneNumber);
return await base.CheckPasswordSignInAsync(user, password, lockoutOnFailure);
}

到目前为止,这已经工作如预期,但我的问题是

  1. 有没有其他更好的方法来处理这种情况?
  2. 我如何实现这一点有任何安全问题吗?

我如何实现这一点有任何安全问题吗?

当前的方法是不断更改全局应用程序选项,该选项应该只在启动时设置。

有没有其他更好的方法来处理这种情况?

重写应该只检查所需的条件。在这个例子中是

只有在提供电话号码时才会启动

例如

public override async Task<SignInResult> CheckPasswordSignInAsync(ApplicationUser user, string password, bool lockoutOnFailure) {
bool confirmedNumberRequiredIfProvided = ... //from config;

//pre sign in checking condition here
if(!base.Options.SignIn.RequireConfirmedPhoneNumber
&& confirmedNumberRequiredIfProvided 
&& !string.IsNullOrWhiteSpace(user.PhoneNumber) 
&& !(await UserManager.IsPhoneNumberConfirmedAsync(user))) {
//consider logging
return SignInResult.NotAllowed;
}

return await base.CheckPasswordSignInAsync(user, password, lockoutOnFailure);
}

假设在启动时基于从配置

中检索到的confirmedNumberRequiredAlways配置base.Options.SignIn.RequireConfirmedPhoneNumber

相关内容

  • 没有找到相关文章

最新更新