注册时的ASP.NET成员资格问题

时间:2009-01-26 21:22:47

标签: c# asp.net asp.net-3.5 membership-provider

我正忙着这个会员资格。

好的,所以,真的很奇怪。我可以注册一个用户。我可以注册,我可以登录。但是,当我去注册另一个用户时,用户没有保存在数据库中,我得到了一个 当用户尝试登录时,会员凭证验证失败事件(我假设因为永远不会保存用户)。

以下是我用来保存新用户的代码。

在页面上:

protected void btnRegister_Click(object sender, EventArgs e)
    {
        if (false == ValidatePage()) return;
        FormsAuthentication.SignOut();
        MembershipCreateStatus status;
        Data.User user = UserManager.CreateUser(txtEmail.Text.Trim(), txtPassword.Text.Trim(), out status);

        switch (status)
        {
            case MembershipCreateStatus.Success:
                UserManager.Save(user);
                break;
            default:
                lblMessage.Text = status.ToString();
                break;
        }

        Response.Redirect("~/login.aspx");
    }

CreateUser方法:

public static User CreateUser(string username, string password, out MembershipCreateStatus status)
    {
        using (TransactionScope transaction = new TransactionScope())
        {
            MembershipUser aspnetUser = Membership.CreateUser(username, password, username, null, null, true, out status);

            User hqUser = null;

            if (status == MembershipCreateStatus.Success)
            {
                hqUser = new User();

                //these properties are only for issues
                //that won't blow up.  They can be safely removed from the system.
                //the aspnet membership tables take care of this stuff for us.
                hqUser.LastLoginDate = DateTime.Now;
                hqUser.DateCreated = DateTime.Now;
                //end properites.

                hqUser.Email = username;
                hqUser.MembershipID = (Guid)aspnetUser.ProviderUserKey;
                Save(hqUser);
            }

            transaction.Complete();
            return hqUser;

}}

额外的保存方法是将用户保存在应用程序的数据库中。用户没有进入会员数据库,所以我知道它在此之前就已经死了。

有人看到任何明显的东西在烧我吗?谢谢!

3 个答案:

答案 0 :(得分:2)

您是否检查过这不是密码复杂性的问题?我知道我以前遇到过这个问题......

答案 1 :(得分:1)

如果状态不等于成功,则在能够查看输出之前重定向页面。

顺便说一下。继承sqlmembership提供程序并使用您自己的额外数据库插入扩展它可能更好,至少如果您没有插入额外的数据。或者您是否在第一次创建帐户时询问的内容超过了默认内容?

尝试使用此代码并查看枚举值在lblMessage中的含义

protected void btnRegister_Click(object sender,EventArgs e){

      if (!ValidatePage()) return;

        FormsAuthentication.SignOut();
            MembershipCreateStatus status;
            Data.User user = UserManager.CreateUser(txtEmail.Text.Trim(), txtPassword.Text.Trim(), out status);
            switch (status) { 
        case MembershipCreateStatus.Success:
                            UserManager.Save(user);
            Response.Redirect("~/login.aspx");
                            break;
                    default:
                            lblMessage.Text = status.ToString();
                            break;
            }       

    }

grrgr,愚蠢的标记事物

希望这有帮助。

答案 2 :(得分:0)

我的第一个猜测是ValidatePage()返回false。