「ForgotPasswordDate」という新しい列を aspnet_Membership テーブルに追加しました。ユーザーがパスワード回復コントロールで送信ボタンを押すと、getDate() メソッドを使用して、ユーザーがボタンを押したタイミングを「ForgotPasswordDate」列に格納します。
その後、ユーザーは ChangePassword.apsx に誘導する URL を含む電子メールを受け取ります。
ユーザーが新しいパスワードを要求してから 1 日後に ChangePassword.aspx ページの有効期限が切れるようにしたかったのです。これは、「ForgotPasswordDate」列の時刻を使用し、AddDay() メソッドを使用して実行されます。
ただし、コードに問題がありました。メンバーシップテーブル内の「ForgotPasswordDate」列を認識できなかったと思います。
これはエラーが発生したコードです:
if (DateTime.Now < user.ForgotPasswordDate.AddMinutes(3))
テスト目的で、現在、ロジックを 3 分に設定しています。
エラーメッセージは次のとおりです。
System.Web.Security.MembershipUser' does not contain a definition for 'ForgotPasswordDate' and no extension method 'ForgotPasswordDate' accepting a first argument of type 'System.Web.Security.MembershipUser' could be found (are you missing a using directive or an assembly reference?
コード全体は次のとおりです。
protected void Page_Load(object sender, EventArgs e)
{
//if the id is in the query string
if (!string.IsNullOrEmpty(Request.QueryString["ID"]))
{
//store the user id
Guid userId = new Guid(Request.QueryString["ID"]);
//attempt to get the user's information
MembershipUser user = Membership.GetUser(userId);
if (DateTime.Now < user.ForgotPasswordDate.AddMinutes(3)) //here is the part
{
//Page not expire yet.
hidden.Text = user.ProviderUserKey.ToString();
Server.Transfer("~/ChangePassword.aspx");
}
else
{
//Expired; direct to Page Expired Page
Server.Transfer("~/PageExpired.aspx");
}
}
}
とにかく、システムが aspnet_membership テーブルの新しい列を認識できるということはありますか?