私はASP.NET MVC 5のWebサイトを構築しており、依存性注入にUnityを使用しています。トークンの生成とトークンの検証の間にある時間が経過した(1時間以上、1日未満)と、無効なトークン例外が発生します。ASP.NET MVC 5とDependency Injection with Unityを使用しているときに無効なトークン
私は私のStartup.csに次のコードをしている:私はそれは私のApplicationUserManagerクラスのconctructorに次のコード(タイムスパンは、今念のため7日に設定されている
internal static IDataProtectionProvider DataProtectionProvider { get; private set; }
public void Configuration(IAppBuilder app)
{
DataProtectionProvider = app.GetDataProtectionProvider();
ConfigureAuth(app);
}
ではありませんしています問題):
app.CreatePerOwinContext(() => DependencyResolver.Current.GetService<ApplicationUserManager>());
:Startup.Auth.csで
var dataProtectionProvider = Startup.DataProtectionProvider;
if (dataProtectionProvider != null)
{
this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser> (dataProtectionProvider.Create("ASP.NET Identity")) {
TokenLifespan = TimeSpan.FromDays(7)
};
}
、私はConfigureAuthメソッドのコードの次の行を持っています私は私のシナリオの一つは、関連するユーザーアカウントを使用して連絡先を作成できますことを追加する必要が
container.RegisterType<ApplicationDbContext>();
container.RegisterType<ApplicationSignInManager>();
container.RegisterType<ApplicationUserManager>();
container.RegisterType<ApplicationRoleManager>();
container.RegisterType<IAuthenticationManager>(
new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication)
);
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(
new InjectionConstructor(typeof(ApplicationDbContext))
);
container.RegisterType<IRoleStore<IdentityRole, string>, RoleStore<IdentityRole>>(
new InjectionConstructor(typeof(ApplicationDbContext))
);
:UnityConfig.csで
は、私は、依存性注入を設定しています。連絡先と関連付けられたユーザーアカウントはContactControllerに作成され、ConfirmEmailメソッドはAccountControllerに作成されます。どちらもApplicationUserManagerをコンストラクタパラメータとして使用します。つまり、ApplicationUserManagerがコントローラに注入されます。
確認メールを受け取った直後にすべてを確認しても問題ありません。しかし、1時間ほど待って確認しようとすると、無効なトークン例外が発生します。
私はすでに誤って別のトークンタイプを混ぜていないことを確認しています。世代と検証の両方が電子メールによる確認用です。また、トークンをエンコード(およびデコード)するURLであることを確認しました。
私は現在、独自のIISを実行している静的IPを持つAzure仮想マシンをテストしています。プロダクション環境はAzure以外のVPS上にある可能性が高く、独自のIISを実行しています。私はAzureのエキスパートではありませんが、私の知る限りでは、ロードバランシングに関連するオプションは選択しませんでした。
私はすでにここや他のウェブサイトで見つけられた可能な解決策を試したので、本当に助けていただきありがとうございます。