0

我创建了一个用户如下:

MembershipCreateStatus status = MembershipCreateStatus.InvalidPassword;
MembershipUser newUser = Membership.CreateUser(userNameTxt.Text.Trim(),
    passwordTxt.Text, emailTxt.Text, "N//A", "N//A", true, out status);
Roles.AddUserToRole(userNameTxt.Text.Trim(), "Member");

// Gather and save Profile info
CustomProfile profile =  CustomProfile.GetProfile(userNameTxt.Text.Trim());

profile.Personal.Email = emailTxt.Text.Trim();
profile.Personal.FirstName = firstNameTxt.Text.Trim();
profile.Personal.LastName = lastNameTxt.Text.Trim();
profile.Personal.Street = streetTxt.Text.Trim();
profile.Personal.City = cityTxt.Text.Trim();
profile.Personal.State = stateDDL.SelectedValue;
profile.Personal.Zip = zipTxt.Text.Trim();
profile.Save();

我在 DB Profile 表中看到了数据,但在 Users 表中没有看到 - 这是设计使然吗?使用 PasswordRecovery 控件时,它似乎无法识别以这种方式创建的用户。有人可以解释以这种方式创建配置文件时使用哪些表以及如何重置密码?

更新:

测试我的 PasswordRecovery 控件时,用户名为空:

MembershipUser user = Membership.GetUser(User.Identity.Name);
if (Page.IsPostBack)
{
    Response.Write(user.UserName);
} 

<add 
    name="DefaultMembershipProvider" 
    type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers,
        Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    connectionStringName="LocalSqlServer" 
    enablePasswordRetrieval="false" 
    enablePasswordReset="true" 
    requiresQuestionAndAnswer="true" 
    requiresUniqueEmail="false" 
    minRequiredPasswordLength="6" 
    minRequiredNonalphanumericCharacters="0" 
    passwordAttemptWindow="1000" 
    applicationName="/" >
4

1 回答 1

1

配置文件数据保存在表中,其中每个属性都是动态的,并aspnet_Profile放置在它的值上。PropertyNamesPropertyValuesString

每个属性都使用UserId. 从 asp.net 让您设计自定义配置文件参数的那一刻起,这种设计是合乎逻辑的。另一方面,如果您有数据库,您可以创建您的个人表格,以根据您的设计保留您喜欢的信息。

要重置密码,您可以使用MSDN 上完整说明的ResetPassword方法。

我更喜欢的另一种方法,但您需要编写更多代码,向用户发送一封电子邮件,从您发送给他们的电子邮件中,您可以在实际上可以编写新密码的页面上,然后您在后面的代码中您将其重置为:

MembershipUser mu = Membership.GetUser(UserIdToChangePass);

if (mu != null)
{
    string sTemporaryPassword = mu.ResetPassword();
    mu.ChangePassword(sTemporaryPassword, txtNewPassword.Text);
}

txtNewPassword用户输入新密码的文本框在哪里。

于 2012-11-24T07:13:04.723 回答