Я реализую идентификатор ASP.Net 2 в системе WebApi. Для управления электронного письма с подтверждением для новых учетных записей, я должен был создать собственный ApplicationUserManager
и зарегистрировать его так, что он будет создан для каждого запроса:Пользовательский UserManager недоступен в OAuthAuthorizationServerProvider
public class IdentityConfig{
public static void Initialize(IAppBuilder app)
{
[snip]
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
}
Он правильно работает внутри ApiController как это:
public class AccountController : ApiController
{
public ApplicationUserManager UserManager
{
get
{
return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
}
проблема я столкнулся в том, что метод ApplicationUserManager.Create
не вызывается, прежде чем я пытаюсь получить доступ к нему в методе создания OAuth маркеров:
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var mgr = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
В приведенном выше коде mgr имеет значение null, потому что GetUserManager получает нуль
Является ли метод создания токена каким-то образом ранее в конвейере, так что методы CreatePerOwinContext
еще не вызваны? Если да, то каков наилучший способ кэширования ApplicationUserManager
, чтобы он мог использоваться внутри GrantResourceOwnerCredentials
?
Я тоже пытался context.OwinContext, но это не помогло. Вы были на правильном пути, что это как-то связано с кодом запуска. Код запуска должен выполняться в определенном неочевидном порядке. Спасибо за подсказку, которая привела меня к ответу. – Brian
Должен ли я распоряжаться 'UserManager' где-то в моей реализации' OAuthAuthorizationServerProvider'? – Shimmy
@Shimmy: В этом не должно быть необходимости. 'UserManager' реализует' IDisposable' и 'CreatePerOwinContext' регистрирует объект только для запроса. – LeftyX