ユーザーが自分の Web サイトにサインインするときに、メール、確認ステータス、モバイル確認ステータスなどのデータをキャッシュする必要があります。ページ リクエストごとにこのデータを取得したくないからです。要件は、ユーザーが何かを行う前に電子メールとモバイルを確認する必要があることです。
私は次のようなコードを使用しています:
public static class CachedData
{
public static bool IsEmailConfirmed
{
get
{
if (HttpContext.Current.Session["IsEmailConfirmed"] == null)
Initialize();
return Convert.ToBoolean(HttpContext.Current.Session["IsEmailConfirmed"]);
}
set
{
HttpContext.Current.Session["IsEmailConfirmed"] = value;
}
}
public static bool IsMobileConfirmed
{
get
{
if (HttpContext.Current.Session["IsMobileConfirmed"] == null)
Initialize();
return Convert.ToBoolean(HttpContext.Current.Session["IsMobileConfirmed"]);
}
set
{
HttpContext.Current.Session["IsMobileConfirmed"] = value;
}
}
public static void Initialize()
{
UserAccount currentUser = UserAccount.GetUser();
if (currentUser == null)
return;
IsEmailConfirmed = currentUser.EmailConfirmed;
IsMobileConfirmed = currentUser.MobileConfirmed;
}
}
すべてPageBase
のページクラスがそこから駆動するクラスがあります。CachedData
クラスでクラスを使用していますPageBase
:
public class PageBase : Page
{
protected override void OnInit(EventArgs e)
{
if (authentication.Required && User.Identity.IsAuthenticated && !IsPostBack)
{
if (CachedData.HasProfile && (!CachedData.IsEmailConfirmed || !CachedData.IsMobileConfirmed) && !Request.Url.AbsolutePath.ToLower().EndsWith("settings.aspx"))
Response.Redirect("/settings-page", true);
}
}
}
おかしなことかもしれませんが、このコードは時々間違って動作し、ユーザーが確認したメールとモバイルの設定ページにリダイレクトされます。
より良い解決策はありますか。