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 プロファイル テーブルにはデータが表示されますが、ユーザー テーブルには表示されません。これは仕様によるものですか? 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="/" >
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、ユーザーが新しいパスワードを入力する TextBox です。

于 2012-11-24T07:13:04.723 に答える