2013-08-06 33 views
1

我正在使用ASP 4.5 WebForms使用的默认成员资格提供程序(使用我自己的数据库),并且面临登录表单的问题。我想定制一个,因为我为它使用了一个花哨的CSS/HTML5代码,但是使用Visual Studio的默认控件会破坏它,并且我想在登录时按下一些自定义代码,同时还要维护控件该默认成员资格提供程序已经带来了(如密码失败计数等)。我应该调用什么方法/过程或者应该写什么自定义代码,以便当用户编写用户名和密码时,它使用这些文本框的值用于登录目的?我试图涉及到登录控制器的登录按钮,但它的范围太有限,并且表格仍然有点破坏了设计。任何帮助是极大的赞赏!使用默认成员身份时添加自定义登录表单

如许,这是我的一些截短使用有关的全部代码查询和东西:

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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
        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("[email protected]"); 
       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默认的成员资格提供者,但我创建了一个第二表格以获取更多信息,以及一个ConfirmationToken,它会生成并通过电子邮件发送给用户,然后用户单击确认,确认页面读取URL参数,如果验证,则在UserInfo表格中打开布尔值。在实际的ASP memebrship登录之前的登录过程中,我有一个用户验证查询,用于验证用户是否已经过验证,如果是,则继续使用默认的asp会员登录。

回答

1

使用Membership class,MembershipUser classForms Authentication class并创建您自己的登录表单。登录控制本身并没有太多的逻辑。

例如,要设置验证Cookie,请使用FormsAuthentication.SetAuthCookie。要验证密码,请使用MembershipProvider.ValidateUser。要查看用户是否因无效的密码尝试被锁定,请使用MembershipUser.IsLockedOut

+0

检入。这正是我所期待的。谷歌搜索默认会员供应商微软或MSDN没有网络我的结果;令人沮丧的:p –

+0

当你开始工作时,发布你的解决方案让其他人看到会很酷。 – Greg

+0

绝对会。感谢一百万格雷格。 –

相关问题