1

ASP 4.5 WebForms が (独自のデータベースを使用して) 使用する既定のメンバーシップ プロバイダーを使用していますが、ログイン フォームに関する問題に直面しています。派手な CSS/HTML5 コードを使用しているため、カスタム コードを作成したいのですが、Visual Studio に指定されたデフォルト コントロールを使用すると、それが壊れてしまいます。また、コントロールを維持しながら、ログイン プレスでカスタム コードを実行したいと考えています。デフォルトのメンバーシップ プロバイダーが既に持っているもの (パスワードの失敗回数など)。ユーザーがユーザー名とパスワードを入力するときに、ログイン目的でこれらのテキストボックスの値を使用するには、どのメソッド/プロセスを呼び出す必要がありますか、またはどのカスタムコードを作成する必要がありますか? Login コントローラーの Login ボタンに手を出してみましたが、範囲が狭すぎて、テーブルがまだ少しデザインを壊しています。どんな助けでも大歓迎です!

約束どおり、これは私が使用した完全なコードであり、クエリなどに関するいくつかの切り捨てがあります。

MembershipCreateStatus status;
        string passwordQuestion = "";
        string passwordAnswer = "";

        if (Membership.RequiresQuestionAndAnswer)
        {
            passwordQuestion = txtQ.Text;
            passwordAnswer = txtA.Text;
        }

       try
       {
            MembershipUser newUser = Membership.CreateUser(txtUserName.Text, txtPassword.Text,
                                                           txtEmail.Text, passwordQuestion,
                                                           passwordAnswer, true, out status);




            if (newUser == null)
            {
                Label1.Visible = true;
               Label1.Text = GetErrorMessage(status);
            }
            else
            {


                string connect4 = ConfigurationManager.ConnectionStrings["InternalConnection"].ConnectionString;
                using (SqlConnection conn4 = new SqlConnection(connect4))
                {

                    string query4 = "INSERT INTO [UserInfo] ([UserName], [ConfirmationToken], [Validated], [FullInfo], [EMail], [SocioNum], [Birthday], [PostalAddress], [Zip], [City], [State], [Phone], [Fullname], [SocialSecurityEncrypted], [JoinDate]) VALUES (@UserName, @ConfirmationToken, @Validated, @FullInfo, @EMail, @SocioNum, @Birthday, @PostalAddress, @Zip, @City, @State, @Phone, @Fullname, @SocialSecurityEncrypted, @JoinDate)";
                    SqlCommand cmd4 = new SqlCommand(query4, conn4);
));
                    string s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                    Random r = new Random();
                    StringBuilder sb = new StringBuilder();
                    for (int i = 1; i <= 30; i++)
                    {
                        int idx = r.Next(0, 35);
                        sb.Append(s.Substring(idx, 1));
                    }
                    string token = Convert.ToString(sb);
                    cmd4.Parameters.AddWithValue("@ConfirmationToken", (token));
(parameters here)



                    cmd4.CommandTimeout = 240;
                    conn4.Open();
                    cmd4.ExecuteNonQuery();
                    conn4.Close();

                    Session["Fullname"] = txtNombre.Text;
                    Session["token"] = token;



                }

                //CUSTOM EMAIL CODE

                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("servername");

                mail.From = new MailAddress("fromhere@tothere.com");
                mail.To.Add(txtEmail.Text);
                mail.IsBodyHtml = true;
                mail.Subject = "Subject";
                mail.Body = "HTML CODE HERE while sending token for verification.";


                SmtpServer.Port = 25;
                SmtpServer.Credentials = new System.Net.NetworkCredential("user", "pass");
                SmtpServer.EnableSsl = false;

                SmtpServer.Send(mail);







                Response.Redirect("~/Login.aspx");
            }
        }
        catch
       {
           Label1.Visible = true;
           Label1.Text = "Erro. Verify info..";
        }
    }



    public string GetErrorMessage(MembershipCreateStatus status)
    {
        switch (status)
        {
            case MembershipCreateStatus.DuplicateUserName:
                return ".";

            case MembershipCreateStatus.DuplicateEmail:
                return ".";

            case MembershipCreateStatus.InvalidPassword:
                return "Password invalid.";

            case MembershipCreateStatus.InvalidEmail:
                return "";

            case MembershipCreateStatus.InvalidAnswer:
                return "";

            case MembershipCreateStatus.InvalidQuestion:
                return "";

            case MembershipCreateStatus.InvalidUserName:
                return "Invalid";

            case MembershipCreateStatus.ProviderError:
                return "Error";

            case MembershipCreateStatus.UserRejected:
                return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

            default:
                return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
        }
    }


}

}

これにより、ASP.NET の既定のメンバーシップ プロバイダーが登録されますが、詳細情報用に 2 番目のテーブルと、生成されてユーザーに電子メールで送信される ConfirmationToken を作成しました。ユーザーは確認のようにクリックし、確認ページで URL を読み取ります。パラメーターであり、検証された場合は、UserInfo テーブルでブール値をオンにします。実際の ASP メンバーシップ ログインの前のログイン プロセスでは、ユーザーが既に検証されているかどうかを検証するユーザー検証クエリがあり、そうであれば、デフォルトの ASP メンバーシップ ログインを続行します。

4

1 に答える 1

1

Membership クラスMembershipUser クラスフォーム認証クラスを使用して、独自のログイン フォームを作成します。ログイン コントロール自体には、実際には多くのロジックが含まれていません。

たとえば、認証 Cookie を設定するには、 を使用しますFormsAuthentication.SetAuthCookie。パスワードを検証するには、 を使用しますMembershipProvider.ValidateUser。無効なパスワードの試行回数が多すぎてユーザーがロックアウトされているかどうかを確認するには、 を使用しますMembershipUser.IsLockedOut

于 2013-08-06T20:49:44.103 に答える