带配置文件的Web应用程序项目

时间:2012-11-24 06:54:50

标签: asp.net asp.net-membership asp.net-profiles

我按如下方式创建了一个用户:

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();

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

更新

在测试我的PasswordRecovery控件时获取用户名为null:

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="/" >

1 个答案:

答案 0 :(得分: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是用户输入新密码的TextBox。