Implementazione di ASP.Net Identity 2 in un sistema WebApi. Per gestire mail di conferma per i nuovi account, ho dovuto creare un costume ApplicationUserManager
e registrarlo in modo che sarebbe stato creato per ogni richiesta:UserManager personalizzato non disponibile in OAuthAuthorizationServerProvider
public class IdentityConfig{
public static void Initialize(IAppBuilder app)
{
[snip]
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
}
funzioni correttamente all'interno di un ApiController come questo:
public class AccountController : ApiController
{
public ApplicationUserManager UserManager
{
get
{
return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
}
il problema che sto affrontando è che il metodo ApplicationUserManager.Create
non viene chiamato prima provo ad accedere nel metodo di creazione OAuth Token:
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var mgr = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
Nel codice precedente, mgr è nullo perché GetUserManager recupera nulla
Il metodo di creazione di token è in qualche modo precedente nella pipeline, in modo tale che i metodi CreatePerOwinContext
non sono stati ancora chiamati? In tal caso, qual è il modo migliore di memorizzare nella cache un ApplicationUserManager
in modo che possa essere utilizzato all'interno di GrantResourceOwnerCredentials
?
ho provato troppo context.OwinContext, ma che non ha aiutato. Sei stato sulla strada giusta che aveva qualcosa a che fare con il codice di avvio però. Il codice di avvio deve essere eseguito in un certo ordine non ovvio. Grazie per il suggerimento che mi ha portato alla risposta. – Brian
Devo gettare 'UserManager' da qualche parte nella mia implementazione' OAuthAuthorizationServerProvider'? – Shimmy
@Shimmy: non dovrebbe esserci alcun bisogno. 'UserManager' implementa' IDisposable' e 'CreatePerOwinContext' registra l'oggetto solo per la richiesta. – LeftyX