Asp.net 具有概要文件的Web应用程序项目
我创建了一个用户,如下所示:Asp.net 具有概要文件的Web应用程序项目,asp.net,asp.net-membership,asp.net-profiles,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
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控件时,用户名为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="/" >
MembershipUser=Membership.GetUser(user.Identity.Name);
如果(第IsPostBack页)
{
Response.Write(user.UserName);
}
配置文件数据保存在aspnet\u 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
是一个文本框,用户可以输入新密码。我应该使用哪种API方法来获取这样创建的用户的用户名?@IrishChieftain我失去了你…:)Membership.GetUser返回null。既然我在使用配置文件,我不应该使用类似的东西吗?var p=CustomProfile.GetProfile(userNameTxt.Text)@IrishChieftain您要求的是配置文件
,而不是用户信息,自定义配置文件是代码中的一部分。这里的表名和我写的一样。用户信息在一个名为aspnet\u Users的表中。配置文件信息位于名为Profiles(非aspnet_Profile)的表中。要使此User.Identity.Name
有效,用户必须登录。检查是否HttpContext.Current.User.Identity.IsAuthenticated==true
,如果它仅登录(不需要User.Identity.Name
),则可以直接作为Membership.GetUser()
获取它。不幸的是,登录一直失败,密码无效……您的意思是不能设置新密码吗?您还可以检查,如果您为登录设置了ssl(安全)必须为true,并且页面不是ssl,则为fail。如果在web.config上未正确设置cookie,也可能失败-必须正确放置名称和域阅读此帖子:和