Question

I am trying to use create user wizard in asp.net for creating new accounts based on this article www.4guysfromrolla.com/articles/062508-1.aspx, disabled his account for immediate login and send email immediately after registration to the concerned email for verification and everything works well.

Sorry guys I cannot upload images without min rep so I'm only able to provide 2 links for now.

Now the problem is email sent to the user with the url included USERID:

And here is how it added to the database as shown:

http://img829.imageshack.us/img829/4410/54303910.png

Now in the Asp.Net configuration as the user is disabled it is shown as below:

http://img41.imageshack.us/img41/9286/74707709.png

As you can see in the above image there is no tick mark checked beside the username(that means the user is disabled and he needs to activate his account using email verfication)

So Once when the user clicks the click it gives me that the user is not found in the database.

I am really stumped with this and every one on the net showed me the same article for sending email. But none of them worked.

Or Am I doing anything wrong? I want to shed some light on me by some of you guys.

Here is my code for creating user and sending email:

 Protected Sub CreateUserWizard1_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles CreateUserWizard1.SendingMail
    Dim newUserAccount As MembershipUser = Membership.GetUser(CreateUserWizard1.UserName)
    Dim newUserAccountId As Guid = DirectCast(newUserAccount.ProviderUserKey, Guid)
    Dim domainName As String = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
    Dim confirmationPage As String = "EmailConfirmation.aspx?UserID=" & newUserAccountId.ToString()
    Dim url As String = domainName & confirmationPage
    e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", url)
    Dim smtp As New SmtpClient()
    smtp.Host = "smtp.gmail.com"
    smtp.Port = 587
    smtp.UseDefaultCredentials = False
    smtp.Credentials = New System.Net.NetworkCredential("myemail@gmail.com", "gmailpassword")
    smtp.EnableSsl = True
    smtp.Send(e.Message)
    e.Cancel = True
End Sub

EmailConfirmation.aspx:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    'Make sure that a valid querystring value was passed through
    If String.IsNullOrEmpty(Request.QueryString("UserID")) OrElse Not Regex.IsMatch(Request.QueryString("UserID"), "[0-9a-f]{8}\-([0-9a-f]{4}\-){3}[0-9a-f]{12}") Then
        lblMessage.Text = "An invalid ID value was passed in through the querystring."
    Else
        'ID exists and is kosher, see if this user is already approved
        'Get the ID sent in the querystring
        Dim userId As Guid = New Guid(Request.QueryString("UserID"))

        'Get information about the user
        Dim userInfo As MembershipUser = Membership.GetUser(userId)
        If userInfo Is Nothing Then
            'Could not find user!
            lblMessage.Text = "The user account could not be found in the membership database."
        Else
            'User is valid, approve them
            userInfo.IsApproved = True
            Membership.UpdateUser(userInfo)

            'Display a message
            lblMessage.Text = "Your account has been verified and you can now log into the site."
        End If
    End If
End Sub
Était-ce utile?

La solution

This is the solution worked for me

 Dim ConString As String = ConfigurationManager.ConnectionStrings("HDIConnectionString").ConnectionString
    Dim UserID As String
    Dim i As Integer = 0

    If (Request.QueryString("UserID") IsNot Nothing) Then
        UserID = Request.QueryString("UserID")
        Dim con As New SqlConnection(ConString)
        Dim cmd As New SqlCommand("UPDATE Users SET IsApproved=1 WHERE UserID=@UserID ", con)
        cmd.Parameters.AddWithValue("@UserID", UserID)
        con.Open()
        i = cmd.ExecuteNonQuery()
        con.Close()
    End If
    If i > 0 Then
        lblMessage.Text = "Your account has been approved. Please <a href=""Login.aspx"">login</a> to the site."
    Else
        lblMessage.Text = "User account could not be found..."
    End If
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top