WebApiシステムにASP.Net Identity 2を実装しています。新しいアカウントの確認メールを管理するために、私は、カスタム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>();
}
}
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var mgr = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
012:
私が直面してる問題は、私はOAuthのトークンの作成方法でそれにアクセスしようとする前に、ApplicationUserManager.Create
メソッドが呼び出されていないということですGetUserManagerがnullを取得するため、上記のコードでは、
CreatePerOwinContext
メソッドがまだ呼び出されていないような方法で、その場合は、ApplicationUserManager
をキャッシュしてGrantResourceOwnerCredentials
の内部で使用できるようにするにはどうすればよいでしょうか?
私もcontext.OwinContextを試してみましたが、それは助けにはなりませんでした。あなたはスタートアップコードとは何か関係があったという正しい軌道にいました。スタートアップコードは特定の順序で実行する必要があります。答えにつながったヒントをありがとう。 – Brian
私の 'OAuthAuthorizationServerProvider'実装のどこかに' UserManager'を置くべきでしょうか? – Shimmy
@Shimmy:その必要はないはずです。 'UserManager'は' IDisposable'を実装し、 'CreatePerOwinContext'は要求に対してのみオブジェクトを登録します。 – LeftyX