首次登录后,ASP.Net登录控件无法进行身份验证

时间:2014-03-19 12:12:16

标签: asp.net vb.net authentication login

我的网站有问题。 直到最近,我的网站登录工作完美。 有一天,我不得不对default.aspx(登录站点)和web.config进行一些更改。

突然登录只是每次尝试都成功。 我试图解决它,但它根本不会登录。 在回滚web.config和新创建的default.aspx之后, 它仍然没有用。

我的下一步是检查Authenticate事件。 无论我做什么,登录总是被报告为失败,除了我重新启动Web服务器后的第一次。 所以我开始检查登录是否为假。如果是这样,我调用Membership.ValidateUser来检查用户是否真的失败了。 由于用户几乎从未进行过身份验证,因此Membership.ValidateUser几乎总是会跳转,但只会每隔一次验证一次用户。

看到这一点,我将一些调试信息放入LoginError事件中。 如果用户有效,我连续检查了5次(只是为了确保它没有偶发错误)。 每一次都很好。

因此,Membership.ValidateUser不在authentiocate事件中工作,但在LoginError事件中。 我甚至试图在身份验证事件中两次调用Membership.ValidateUser,但它仍然无法正常工作。

我现在有点迷失了答案。 设置SessionID Cookie,登录成功后设置授权cookie。

这是我的登录控件:

            <asp:Login ID="Login1" runat="server" BackColor="#EFF3FB" BorderColor="#B5C7DE" 
        BorderPadding="4" BorderStyle="Solid" BorderWidth="1px" 
        DestinationPageUrl="~/checkLogin.aspx" Font-Names="Verdana" Font-Size="1.2em" 
        ForeColor="#333333" MembershipProvider="AspNetSqlMembershipProvider">
        <InstructionTextStyle Font-Italic="True" ForeColor="Black" />
        <LayoutTemplate>
            <table cellpadding="4" cellspacing="0" width="100%" style="border-collapse:collapse;">
                <tr>
                    <td>
                        <table cellpadding="0" style="width: 100%">
                            <tr>
                                <td align="center" colspan="2" 
                                    style="color:White;background-color:#507CD1;font-size:2em;font-weight:bold;">
                                    Anmelden</td>
                            </tr>
                            <tr>
                                <td align="right" valign="middle" style="height: 50px;">
                                    <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Benutzername:</asp:Label>
                                </td>
                                <td>
                                    <asp:TextBox ID="UserName" runat="server" Font-Size="1.6em"></asp:TextBox>
                                    <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
                                        ControlToValidate="UserName" ErrorMessage="Der Benutzername ist erforderlich." 
                                        ToolTip="Der Benutzername ist erforderlich." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                                </td>
                            </tr>
                            <tr>
                                <td align="right">
                                    <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Kennwort:</asp:Label>
                                </td>
                                <td>
                                    <asp:TextBox ID="Password" runat="server" Font-Size="1.6em" TextMode="Password"></asp:TextBox>
                                    <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" 
                                        ControlToValidate="Password" ErrorMessage="Das Kennwort ist erforderlich." 
                                        ToolTip="Das Kennwort ist erforderlich." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="2">
                                    <asp:CheckBox ID="RememberMe" runat="server" Text="Anmeldedaten speichern." />
                                </td>
                            </tr>
                            <tr>
                                <td align="center" colspan="2" style="color:Red;">
                                    <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
                                </td>
                            </tr>
                            <tr>
                                <td align="right" colspan="2">
                                    <asp:Button ID="LoginButton" runat="server" BackColor="White" 
                                        BorderColor="#507CD1" BorderStyle="Solid" BorderWidth="1px" CommandName="Login" 
                                        Font-Names="Verdana" Font-Size="1.6em" ForeColor="#284E98" Text="Anmelden" 
                                        ValidationGroup="Login1" />
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </LayoutTemplate>
        <LoginButtonStyle BackColor="White" BorderColor="#507CD1" BorderStyle="Solid" 
            BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284E98" />
        <TextBoxStyle Font-Size="0.8em" />
        <TitleTextStyle BackColor="#507CD1" Font-Bold="True" Font-Size="0.9em" 
            ForeColor="White" />
    </asp:Login>

这是我的控制事件:

        Protected Sub Login1_Authenticate(sender As Object, e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
    log4net.Config.XmlConfigurator.Configure()

    log.Debug("Login: 1." & e.Authenticated.ToString)

    If e.Authenticated = False Then
        If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
            log.Debug("Login: 2. Is Valid")
            e.Authenticated = True
            FormsAuthentication.SetAuthCookie(Login1.UserName, True)
        Else
            If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
                log.Debug("Login: 3. Is Valid")
                e.Authenticated = True
                FormsAuthentication.SetAuthCookie(Login1.UserName, True)
            Else
                log.Debug("Login: 4. Aint Valid")
                e.Authenticated = False
            End If
        End If
    End If

    log.Debug("Login: 5. End")
End Sub

Protected Sub Login1_LoginError(sender As Object, e As System.EventArgs) Handles Login1.LoginError
    log4net.Config.XmlConfigurator.Configure()

    log.Debug("Loginerror: 1. Entry")

    Dim a As Integer = 1

    Dim user1 As New BenutzerVerwaltung.clsUser("admin")
    log.Debug("Loginerror: 2. User1 admin: " & user1.UserName)

    Dim user2 As MembershipUser = Membership.GetUser("admin")
    log.Debug("Loginerror: 3. User2 admin: " & user2.UserName)

    If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
        log.Debug("Loginerror: 4. Is Valid, Username: " & Login1.UserName.Trim)
    Else
        log.Debug("Loginerror: 5. Aint Valid, username: " & Login1.UserName.Trim)
    End If


    If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
        log.Debug("Loginerror: 6. Is Valid, Username: " & Login1.UserName.Trim)
    Else
        log.Debug("Loginerror: 7. Aint Valid, username: " & Login1.UserName.Trim)
    End If


    If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
        log.Debug("Loginerror: 8. Is Valid, Username: " & Login1.UserName.Trim)
    Else
        log.Debug("Loginerror: 9. Aint Valid, username: " & Login1.UserName.Trim)
    End If


    If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
        log.Debug("Loginerror: 10. Is Valid, Username: " & Login1.UserName.Trim)
    Else
        log.Debug("Loginerror: 11. Aint Valid, username: " & Login1.UserName.Trim)
    End If


    If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
        log.Debug("Loginerror: 12. Is Valid, Username: " & Login1.UserName.Trim)
    Else
        log.Debug("Loginerror: 13. Aint Valid, username: " & Login1.UserName.Trim)
    End If

End Sub

1 个答案:

答案 0 :(得分:0)

不幸的是,我无法解决此问题,也没能确定我的线程。

因此,我必须做一些工作才能使我的网站再次正常工作。 登录失败时,我检查用户是否存在于数据库中。如果是这种情况,那么我将授权用户并设置登录Cookies。

          If e.Authenticated = False Then
            'Init Base User, check if System works
            Try
                user1 = New BenutzerVerwaltung.clsUser()
            Catch ex As Exception
                showMessage("Loginfehler: Basis Benutzer")
                Exit Sub
            End Try

            'Check if User exists
            Try
                user1.loadUser(Login1.UserName.Trim)
            Catch ex As Exception
                showMessage("LoginFehler: Benutzer Ini")
                Exit Sub
            End Try

            Try
                'Manually Validate user and set Authentication Cookies.
                If (Membership.ValidateUser(Login1.UserName.Trim, Login1.Password)) Then
                    e.Authenticated = True
                    FormsAuthentication.SetAuthCookie(Login1.UserName, True)
                Else
                    e.Authenticated = False
                End If
            Catch ex As Exception
                showMessage("LoginFehler: MB-Framework")
                Exit Sub
            End Try

          End If
相关问题