2017-04-12 2 views
0

멤버십 생성 사용자 기능에는 사용자가 저장해야하는 많은 사용자 세부 정보가 부족하다는 것이 잘 알려져 있습니다. 내가 주위에 내 작품을 제시하고 있는데 나는 현재이 코드 뒤에 이제이 코드 (참고 마이크로 소프트)멤버십 사용자 생성 기능 향상

Public Function GetErrorMessage(status As MembershipCreateStatus) As String 

    Select Case status 
     Case MembershipCreateStatus.DuplicateUserName 
      Return "Username already exists. Please enter a different user name." 

     Case MembershipCreateStatus.DuplicateEmail 
      Return "A username for that e-mail address already exists. Please enter a different e-mail address." 

     Case MembershipCreateStatus.InvalidPassword 
      Return "The password provided is invalid. Please enter a valid password value." 

     Case MembershipCreateStatus.InvalidEmail 
      Return "The e-mail address provided is invalid. Please check the value and try again." 

     Case MembershipCreateStatus.InvalidAnswer 
      Return "The password retrieval answer provided is invalid. Please check the value and try again." 

     Case MembershipCreateStatus.InvalidQuestion 
      Return "The password retrieval question provided is invalid. Please check the value and try again." 

     Case MembershipCreateStatus.InvalidUserName 
      Return "The user name provided is invalid. Please check the value and try again." 

     Case MembershipCreateStatus.ProviderError 
      Return "The authentication provider Returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator." 

     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." 

     Case Else 
      Return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator." 
    End Select 
End Function 

Public Function GetUsrID(UserName) As String 
    Dim sql As String = "SELECT UserId FROM aspnet_Users WHERE UserName= @UserName" 
    Using cn As New SqlConnection(ARTSQLDBCOM), _ 
     cmd As New SqlCommand(sql, cn) 
     cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 256).Value = UserName 
     cn.Open() 
     Dim val As String = String.Empty 
     Dim getVal As Object = cmd.ExecuteScalar() 
     cn.Close() 
     If Not IsNothing(getVal) Then 
      val = getVal.ToString 
      Return val 
     Else 
      Return Nothing 
     End If 
    End Using 
End Function 


Public Function CreateUser_AugmentedUpdate(ByVal UserName As String, ByVal JobTitleID As String, ByVal Prfx As String, ByVal fname As String, ByVal Mname As String, ByVal Lname As String, ByVal Initial As String, _ 
    ByVal disname As String, ByVal UsrDOB As String, ByVal TelNum As String, ByVal UsrSignature As String, ByVal UsrImg_aURL As String, ByVal UsrImg_rURL As String) 
    Try 
     Dim UserID As String = GetUsrID(UserName) 
     Dim SQLCmd As New SqlCommand() 
     SQLCmd.CommandType = CommandType.StoredProcedure 
     SQLCmd.CommandText = "aspnet_Users_CreateUser_AugmentedUpdate" 
     SQLCmd.Parameters.Add("@UserId", SqlDbType.NVarChar).Value = UserID.ToString 
     If (String.IsNullOrEmpty(JobTitleID)) Then 
      SQLCmd.Parameters.Add("@JobTitleID", SqlDbType.Int).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@JobTitleID", SqlDbType.Int).Value = Convert.ToInt32(JobTitleID) 
     End If 
     If (String.IsNullOrEmpty(Initial)) Then 
      SQLCmd.Parameters.Add("@Initial", SqlDbType.Int).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@Initial", SqlDbType.Int).Value = Convert.ToInt32(Initial) 
     End If 
     If (String.IsNullOrEmpty(Prfx)) Then 
      SQLCmd.Parameters.Add("@Prfx", SqlDbType.Int).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@Prfx", SqlDbType.Int).Value = Convert.ToInt32(Prfx) 
     End If 
     If (String.IsNullOrEmpty(fname)) Then 
      SQLCmd.Parameters.Add("@fname", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@fname", SqlDbType.NVarChar).Value = fname.ToString 
     End If 

     If (String.IsNullOrEmpty(Mname)) Then 
      SQLCmd.Parameters.Add("@Mname", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@Mname", SqlDbType.NVarChar).Value = Mname.ToString 
     End If 
     If (String.IsNullOrEmpty(Lname)) Then 
      SQLCmd.Parameters.Add("@Lname", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@Lname", SqlDbType.NVarChar).Value = Lname.ToString 
     End If 
     If (String.IsNullOrEmpty(disname)) Then 
      SQLCmd.Parameters.Add("@disname", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@disname", SqlDbType.NVarChar).Value = disname.ToString 
     End If 

     Dim dateValue As Date 
     If String.IsNullOrWhiteSpace(UsrDOB) Then 
      SQLCmd.Parameters.Add("@UsrDOB", SqlDbType.Date).Value = DBNull.Value 
     ElseIf Date.TryParse(UsrDOB, dateValue) Then 
      SQLCmd.Parameters.Add("@UsrDOB", SqlDbType.Date).Value = dateValue 
     Else 
      SQLCmd.Parameters.Add("@UsrDOB", SqlDbType.Date).Value = DBNull.Value 
     End If 

     If (String.IsNullOrEmpty(TelNum)) Then 
      SQLCmd.Parameters.Add("@TelNum", SqlDbType.NChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@TelNum", SqlDbType.NChar).Value = TelNum.ToString 
     End If 
     If (String.IsNullOrEmpty(UsrSignature)) Then 
      SQLCmd.Parameters.Add("@UsrSignature", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@UsrSignature", SqlDbType.NVarChar).Value = UsrSignature.ToString 
     End If 
     If (String.IsNullOrEmpty(UsrImg_aURL)) Then 
      SQLCmd.Parameters.Add("@UsrImg_aURL", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@UsrImg_aURL", SqlDbType.NVarChar).Value = UsrImg_aURL.ToString 
     End If 
     If (String.IsNullOrEmpty(UsrImg_rURL)) Then 
      SQLCmd.Parameters.Add("@UsrImg_rURL", SqlDbType.NVarChar).Value = DBNull.Value 
     Else 
      SQLCmd.Parameters.Add("@UsrImg_rURL", SqlDbType.NVarChar).Value = UsrImg_rURL.ToString 
     End If 
     SQLCmd.Connection = ARTSQLCON 
     ARTSQLCON.Open() 
     SQLCmd.ExecuteNonQuery() 
     ARTSQLCON.Close() 
     Return "User has been Created Successfully" 
    Catch 
     Return "Create User Phase 2 Error. Please refer to your database developer" 
    End Try 
End Function 

<WebMethod()> _ 
Public Function RegNewUser(ByVal Username As String, ByVal Password As String, ByVal Email As String, ByVal JobTitleID As String, ByVal Prfx As String, ByVal fname As String, ByVal Mname As String, ByVal Lname As String, ByVal Initial As String, _ 
    ByVal disname As String, ByVal UsrDOB As String, ByVal TelNum As String, ByVal UsrSignature As String, ByVal UsrImg_aURL As String, ByVal UsrImg_rURL As String) As String 
    Dim status As MembershipCreateStatus 
    'Dim passwordQuestion As String = "" 
    'Dim passwordAnswer As String = "" 

    'If Membership.RequiresQuestionAndAnswer Then 
    ' passwordQuestion = PasswordQuestionDDl.Text.Trim() 
    ' passwordAnswer = PasswordAnswerTextbox.Text 
    'End If 
    Try 
     Dim newUser As MembershipUser = Membership.CreateUser(Username, Password, Email, Nothing, Nothing, False, status) 
     If newUser Is Nothing Then 
      Return GetErrorMessage(status) 

     Else 
      CreateUser_AugmentedUpdate(Username, JobTitleID, Prfx, fname, Mname, Lname, Initial, _ 
    disname, UsrDOB, TelNum, UsrSignature, UsrImg_aURL, UsrImg_rURL) 
      Return "User has been Created Successfully" + JobTitleID 
     End If 
    Catch 
     Return "Create User Phase 1 Error. Please refer to your database developer" 
    End Try 


End Function 

을 사용하고

(I 웹 방법을 사용하고 있습니다), 당신의 전문가의 의견이 필요, 내가 넣어 새로운 사용자 ID를 다른 테이블에 삽입하려면 asp users 테이블에서 트리거하십시오. 내 SQL 저장 프로 시저 (aspnet_Users_CreateUser_AugmentedUpdate)는 새 테이블에서 레코드 업데이트를 실행합니다.

코드는 아름답게 작동하지만 좋은 연습입니까? 우리는 멤버 자격 공급자에 거래를 사용할 수 없기 때문에

감사

답변

1

귀하의 구현은 올바른 것입니다.

Membership.CreateUser을 호출하기 전에 사용자가 유효한 데이터를 입력해야합니다. 그래서 그 라인 앞에 몇 가지 유형의 검증을 할 것입니다. 그렇지 않으면 매달린 데이터로 끝날 것입니다.


회원 자격과 관련이없는 약간의 개선. 메소드에 3 개 이상의 인수를 전달하는 경우 object 사용을 고려할 수 있습니다. Clean Code by Robert C. Martin에서 자세한 내용을 볼 수 있습니다.

Public Function CreateUser_AugmentedUpdate(ByVal user As UserModel) 

if 연산자를 사용하면 if 문을 줄일 수 있습니다.

SQLCmd.Parameters.Add("@TelNum", SqlDbType.NChar).Value = 
    If(String.IsNullOrEmpty(TelNum), DBNull.Value, TelNum.ToString)