Я использую ASP.Net Идентичность и хотел добавить ApplicationUserManager
сервис для всех моих пользовательских контроллеров следуя эту статью: How to plug my Autofac container into ASP. NET Identity 2.1Переходя ApplicationUserManager к ApplicationOAuthProvider с Autofac с ASP.Net Идентичностью
Это прекрасно работает в моих контроллерах , но не тогда, когда я пытаюсь создать токен, вызывая localhost: xxxx/token на моем API. Ниже приведен метод, но context.OwinContext.GetUserManager
возвращает null.
Я попробовал накинуть ApplicationUserManager
на ApplicationOAuthProvider
, но не смог ударить. Не могли бы вы указать мне в правильном направлении?
Edit: 10/15
Хорошо, таким образом я получил немного дальше, но я до сих пор stuck.I удалось инициализировать классы со следующим:
var x = new DatabaseContext();
var store = new UserStore<ApplicationUser>(x);
var options = new IdentityFactoryOptions<ApplicationUserManager>()
{
DataProtectionProvider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("ApplicationName")
};
builder.Register<DatabaseContext>(c => x);
builder.Register<UserStore<ApplicationUser>>(c => store).AsImplementedInterfaces();
builder.Register<IdentityFactoryOptions<ApplicationUserManager>>(c => options);
builder.RegisterType<ApplicationUserManager>();
builder.Register<ApplicationOAuthProvider>(c => new ApplicationOAuthProvider("self", new ApplicationUserManager(store, options))).As<IOAuthAuthorizationServerProvider>();
Это позволило мне передать ApplicationUserManager
в мой конструктор ApplicationOAuthProvider
. В конфигурации Startup.Auth
я инициализировать поставщика с нижеследующим:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = (IOAuthAuthorizationServerProvider)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IOAuthAuthorizationServerProvider)),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
Это заставляет меня ближе к решению, но все еще есть две проблемы.
Во-первых, когда я вызываю/токен в API, userManager.FindAsync(context.UserName, context.Password)
возвращает нулевое значение, но userManager.FindByEmailAsync(context.UserName)
возвращает нужного пользователя. Моя первоначальная мысль заключается в неправильном пароле, но я убедился, что это тот же пароль, который я зарегистрировал.
Второй вопрос, если я называю зарегистрироваться на моем AccountController, а затем вызвать/маркер, я получаю Не удается получить доступ к имени object.Object, расположенное: «» UserStore ошибки. Поэтому я предполагаю, что это означает, что я не инициализирую ApplicationOAuthProvider
правильно в файле Bootstrapper.
Любое руководство будет принята с благодарностью. Благодаря!
вы получите никакой радости с этим? У меня такая же проблема, когда я не могу ввести UserManager. Я использую Unity, но принцип тот же. – Raj
Я не нашел полного решения, и, к сожалению, мне здесь не повезло. Я создал UserService и ввел ApplicationUserManager в эту службу, а затем ввел UserService в ApplicationOAuthProvider. Последнее, что я проверил, не получал ошибку объекта, но я все еще получал нулевое значение при вызове FindAsync() в UserManager. Надеюсь, это поможет. – user2325333
yup, Im застрял точно в том же месте. Вы пробовали делать это без какой-либо инъекции? Я пытаюсь, но не могу, похоже, получить объект UserStore, который очень странный. – Raj