0

「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 テーブルの新しい列を認識できるということはありますか?

4

1 に答える 1

0

メンバーシップが使用するストアド プロシージャを見つけ、変更して新しい列を含めます。次に、現在のメンバーシップ クラスをオーバーライドして、新しいプロパティを含める必要がある場合があります。

于 2012-07-21T11:03:14.783 に答える