我发现自己需要同时提供用户名和密码,以通过 UserManager 从我的自定义 IUserStore 中检索用户帐户。不幸的是,似乎对此没有任何支持。我看到在 UserManager 中接受用户名/密码的唯一方法是Task<TUser> FindAsync(string userName, string password)
内部调用Task<TUser> this.Store.FindByNameAsync(userName)
,然后通过调用验证密码this.VerifyPassword(passwordStore, tUser, password))
(感谢 ILSpy)。
我无法选择仅根据用户名获取用户密码。只有当我在同一个调用中提供用户名和密码时,验证才能成功。我最终对 UserManager 进行了子类化并添加了我自己的方法TUser FindUserAndPassword(string userName, string password)
,该方法对我的自定义商店 api 进行了一次调用,提供了用户名和密码(我也可以覆盖FindUser(string UserName, string password)
而不是添加新方法)。
尽管这可行,但我真的很惊讶新的身份框架不支持开箱即用的这一要求。也许我什么都没看到。有什么见解吗?