2016-06-07 3 views
1

Для моего сайта asp.net я пытался использовать функцию FB & Google Login. Я нашел учебник от ASPSNIPPETS. Теперь в этом, что я сделал, это если пользователь нажимает кнопку входа в Facebook, то сначала разрешает пользователю & получить информацию о пользователе в панели. Затем я поместил свой код, чтобы проверить, существует ли пользователь в моем db или нет. Если нет, то он вставляет пользователя &, а затем вводит код входа. Моя проблема заключается в том, что после выполнения первой строки кода она перестает выполняться дальше, так что не удается проверить, зарегистрирован ли пользователь или нет & и так далее. Я думаю, что это может быть из-за перенаправления url, который останавливает дальнейшие коды o execute. Как я могу устранить эту проблему?Facebook и Google Войти на сайт asp.net

Protected Sub Login(sender As Object, e As EventArgs) 
     FaceBookConnect.Authorize("user_photos,email", Request.Url.AbsoluteUri.Split("?"c)(0)) 

If Not String.IsNullOrEmpty(lblId.Text) Then 
      Dim query As String = "Select ID, email From users where [email protected]" 
      con.Open() 
      Dim cmd As New MySqlCommand(query, con) 
      cmd.Parameters.AddWithValue("@id", lblId.Text) 
      Dim dr As MySqlDataReader = cmd.ExecuteReader() 
      If dr.HasRows Then 
       'Do Login Code here 
       Try 
        Dim str As String = "select * from users where ID='" + lblId.Text + "';" 
        Dim cmd2 As New MySqlCommand(str, con) 
        Dim da As New MySqlDataAdapter(cmd2) 
        Response.Cookies("User_Type").Value = "users" 
        Response.Cookies("chkusername").Value = lblId.Text 
        Response.Redirect(Request.Url.AbsoluteUri) 
        welcome.Visible = True 
       Catch ex As Exception 
        Response.Write(ex) 
       End Try 
      Else 
       Try 
        Dim str1 As String = "INSERT INTO users (ID, DP, displayName) values('" + lblId.Text + "', '" + ProfileImage.ImageUrl.ToString + "', '" + lblName.Text + "')" 
        Dim adapter As New MySqlDataAdapter 
        Dim command As New MySqlCommand 
        dr.Close() 
        command.CommandText = str1 
        command.Connection = con 
        adapter.SelectCommand = command 
        command.ExecuteNonQuery() 
       Catch ex As Exception 
        Response.Write(ex) 
       End Try 


       Dim con2 As New MySqlConnection("connectionstring") 
       con2.Open() 
       Dim cmd3 As New MySqlCommand("Select ID, email From users where [email protected]", con2) 
       cmd3.Parameters.AddWithValue("@id", lblId.Text) 
       Dim dr2 As MySqlDataReader = cmd3.ExecuteReader() 
       If dr2.HasRows Then 
        'Do Login Code here 
        Try 
         Dim str As String = "select * from users where ID='" + lblId.Text + "';" 
         Dim cmd2 As New MySqlCommand(str, con2) 
         con2.Open() 
         Dim da As New MySqlDataAdapter(cmd3) 
         Response.Cookies("User_Type").Value = "users" 
         Response.Cookies("chkusername").Value = lblId.Text 
         Response.Redirect(Request.Url.AbsoluteUri) 
        Catch ex As Exception 
         Response.Write(ex) 
         con2.Close() 
        End Try 
        con.Close() 
       End If 

      End If 
     End If 
     con.Close() 
    End Sub 

ответ

0

Сначала вы можете оптимизировать свой код:

 If Not String.IsNullOrEmpty(lblId.Text) Then 
     Dim str As String = "select * from users where [email protected]" 
     con.Open() 
     Dim cmd2 As New MySqlCommand(str, con) 
     cmd.Parameters.AddWithValue("@id", lblId.Text) 
     Dim da As New Common.DataAdapter(cmd2) 
     Dim ds As New Data.DataSet() 
     da.Fill(ds) 
     If ds.Tables(0).Rows.Count > 0 Then 
      'Do Login Code here 
      Try 

       Response.Cookies("User_Type").Value = "users" 
       Response.Cookies("chkusername").Value = lblId.Text 
       Response.Redirect(Request.Url.AbsoluteUri) 
       welcome.Visible = True 
      Catch ex As Exception 
       Response.Write(ex) 
      End Try 
     Else 
      Try 
       Dim str1 As String = "INSERT INTO users (ID, DP, displayName) values(@id, @img,@name)" 
       Dim cmd As New MySqlCommand 
       cmd = New SqlCommand(req, con) 
       cmd.Parameters.Add(New SqlParameter("@id", lblId.Text)) 
       cmd.Parameters.Add(New SqlParameter("@img", ProfileImage.ImageUrl.ToString)) 
       cmd.Parameters.Add(New SqlParameter("@name", lblName.Text)) 
       cmd.ExecuteNonQuery() 
      Catch ex As Exception 
       Response.Write(ex) 
      End Try 
      'After insertion you don't have to select from database just send the parameters to cookies 
      Response.Cookies("User_Type").Value = "users" 
      Response.Cookies("chkusername").Value = lblId.Text 
      Response.Redirect(Request.Url.AbsoluteUri) 

     End If 
     con.Close() 
    End If 
+0

Второй блок сначала проверяет, является ли пользователь извлекается из фб будет существовать в моей базе данных или нет. Если нет, то сначала вставьте его в таблицу, а затем выполните логин. И если данные существуют, то он не будет вставлять и напрямую вводить пользователя в систему. Теперь предположим, что если я поставлю второй блок на другую кнопку, то этот код будет работать нормально, но я не хочу, чтобы пользователи нажимали 2 раза для входа в систему. Потому что сначала он будет получать данные пользователей из fb, а затем перестает выполнять дополнительный код, и это моя основная проблема. – SUN

+0

Я плохо справился с этой проблемой. Пожалуйста, помогите мне, если вы можете или предложите мне, если моя логика ошибочна. – SUN

+0

Второй блок, который я хочу: Dim con2 As New MySqlConnection ("connectionstring") con2.Open() ................. Я благодарю, что дублируется ?? –

Смежные вопросы