我创建了一个用户,如下所示:
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();
我在数据库配置文件表中看到了数据,但在用户表中没有看到数据 - 这是设计使然吗?它似乎无法识别使用密码恢复控件时以这种方式创建的用户。有人可以解释以这种方式创建配置文件时使用哪些表以及如何重置密码吗?
更新:
在测试我的密码恢复控件时获取用户名为空:
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="/" >
配置文件数据保存在aspnet_Profile
表中,其中每个属性都是动态的,并放置在PropertyNames
上并PropertyValuesString
其值。
每个属性都通过UserId
连接到用户。从允许您设计自定义配置文件参数的那一刻起,此设计就是合乎逻辑 asp.net。另一方面,如果您有数据库,则可以创建个人表,以随心所欲地保存该信息。
,可以使用 MSDN 上完全说明的重置密码方法。
我更喜欢的另一种方法,但你需要制作更多的代码,是,向用户发送电子邮件,从你发送给他们的电子邮件到一个实际上可以写一个新密码的页面上,你在你背后的代码上将其重置为:
MembershipUser mu = Membership.GetUser(UserIdToChangePass);
if (mu != null)
{
string sTemporaryPassword = mu.ResetPassword();
mu.ChangePassword(sTemporaryPassword, txtNewPassword.Text);
}
其中txtNewPassword
是用户输入新密码的文本框。