Login med authentication
Jeg har læst og prøvet flere eksempler af kode, men er ikke kommet til en rigtig løsning, så jeg forsøger nu med et konkret spørgsmål. Det skal siges, at måske er flere fejl i min kode.Jeg har disse controls i min aspx fil:
ErrorMessage (Label)
txtUsername (TextBox)
txtPassword (TextBox)
chkPersistLogin (CheckBox)
btnLogin (Button)
Dette er min vb script fil:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Security
Imports System.Configuration
Public Class Login
Inherits System.Web.UI.Page
Protected WithEvents txtUserName As System.Web.UI.WebControls.TextBox
Protected WithEvents txtPassword As System.Web.UI.WebControls.TextBox
Protected WithEvents ErrorMessage As System.Web.UI.WebControls.Label
Protected WithEvents chkPersistLogin As System.Web.UI.WebControls.CheckBox
Protected WithEvents btnLogin As System.Web.UI.WebControls.Button
Protected WithEvents BtnSubmit As System.Web.UI.WebControls.Button
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub
Sub ProcessLogin(ByVal objSender As Object, ByVal objArgs As EventArgs)
If FormsAuthentication.Authenticate(txtUserName.Text, txtPassword.Text) Then
FormsAuthentication.SetAuthCookie(txtUserName.Text, False)
Response.Cookies("AspxUserName").Value = txtUserName.Text
Response.Redirect("Login.aspx")
Else
ErrorMessage.Text = "<b>Invalid Credentials. Please try again...</b>"
End If
End Sub
Function Authenticate(ByVal user As String, ByVal pass As String) As Boolean
Dim authenticated As Boolean = False
Try
Dim myConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("conn"))
Dim myCommand As SqlCommand = New SqlCommand("sp_AuthenticateUser", myConnection)
myCommand.CommandType = CommandType.StoredProcedure
Dim myUserId As SqlParameter = New SqlParameter("@UserId", SqlDbType.VarChar, 20)
myUserId.Value = user.Trim()
myCommand.Parameters.Add(myUserId)
Dim myPassword As SqlParameter = New SqlParameter("@Password", SqlDbType.VarChar, 15)
myPassword.Value = pass.Trim()
myCommand.Parameters.Add(myPassword)
Dim Isvalid As SqlParameter = New SqlParameter("@IsValid", SqlDbType.Int)
IsValid.Direction = ParameterDirection.Output
myCommand.Parameters.Add(IsValid)
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
If Convert.ToInt16(Isvalid.Value) = 1 Then
authenticated = True
End If
Catch e As Exception
Response.Write("Auth Exception: " + e.ToString())
End Try
Return authenticated
End Function
Sub SignOut(ByVal objSender As Object, ByVal objArgs As EventArgs)
FormsAuthentication.SignOut()
Response.Redirect("Login.aspx?Manage=Logout")
End Sub
End Class
Og jeg bruger denne stored procedure i MS SQL'en
CREATE PROCEDURE dbo.sp_AuthenticateUser @UserId varchar(20), @Password varchar(20) , @IsValid int output AS
BEGIN
IF (SELECT COUNT(*) FROM tUser WHERE sUserName = @UserId And sPassword = @Password ) = 1
SET @ISValid = 1
ELSE
SET @IsValid = 0
Return
END
GO
Kan nogen give mig en god løsning på problemet.
