【发布时间】:2021-10-05 14:23:22
【问题描述】:
我的中间件方法目前有一个“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);
}
到目前为止,这已按预期工作,但我的问题是
- 是否有任何替代/更好的方法来处理这种情况?,
- 我的实现方式是否存在任何安全问题?
【问题讨论】:
-
电话确认可以要求外部服务如twilio通过发送短信确认:twilio.com/docs/libraries/csharp-dotnet
-
@Chaodeng 我关心的不是“如何发送短信”,感谢分享链接,但它并没有真正解决我的问题
标签: c# asp.net-mvc asp.net-core authentication asp.net-identity