密码锁定错误后如何解锁ASPNETDB用户帐户?

时间:2010-06-20 23:19:28

标签: c# asp.net visual-studio user-controls aspnetdb

我是新手,并使用ASPNETDB visual studio生成的用户数据库登录控件

我在web.config中设置了最大错误密码数为5,并测试了帐户被锁定的程度。但我现在无法弄明白如何解锁帐户。

这个问题出现在我的远程托管网站上,所以这不是我可以用visual studio asp.net配置工具做的事情

我可以在.cs page_load中运行一些c#代码,这样我就可以输入用户名并让它解锁了。然后我可以制作一个表格,以便在我需要的时候轻松完成。

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:12)

  MembershipUser usr = Membership.GetUser(userName);
  usr.UnlockUser();

答案 1 :(得分:8)

手动,在数据库中,转到aspnet_membership表,将FailedLoginPasswordAttemptCount(类似名称)设置为零,并将IsLockedOut设置为0(false)。

我们创建了一个自定义安全屏幕来管理我的几个应用程序中的这些,或者您可以使用其他帖子中提到的组件。

HTH。

答案 2 :(得分:1)

您是否尝试过更改Web.config以将锁定时间延长为“更多尝试”或类似的内容?也许它会以这种方式让你。

我不会为您了解任何CSharp代码,但我使用的工具是Quality Data membership Manager Control,我可以通过网络表单管理成员资格(包括锁定状态)。

虽然这对您现在没有帮助,但它将来会对您有所帮助。此外,一旦您可以再次登录(锁定失效后),我建议您从Web.config中删除锁定信息,直到您准备好上线为止。对您的应用程序进行广泛测试必然会让您一次又一次地被锁定。

答案 3 :(得分:1)

我在几年前建立的应用程序中有一些非常古老(丑陋)的代码。它几乎是一个gridview控件的hack up,它使用aspnet_Membership_UnlockUser存储过程作为delete命令,并将键设置为gridrow中被锁定用户的用户名。我甚至没有使用C#。这就是我所拥有的:

<asp:Label runat="server" ID="LblLockedUsers" Text="Locked Out Users:" />

<asp:SqlDataSource ID="SqlLockedUsers" runat="server" ConnectionString='<%$ ConnectionStrings:myConnString %>'
SelectCommand="selLockedOutUsers" SelectCommandType="StoredProcedure" DeleteCommand="aspnet_Membership_UnlockUser"
DeleteCommandType="StoredProcedure" />

<asp:GridView ID="GvLockedUsers" runat="server" AllowPaging="True" PageSize="5" AutoGenerateColumns="False"
DataKeyNames="UserName" DataSourceID="SqlLockedUsers" AllowSorting="True" GridLines="None"
Width="100%">
  <Columns>
    <asp:TemplateField>
      <ItemTemplate>
        <asp:LinkButton ID="LnkUnlock" CommandArgument='<%# Eval("UserName") %>' CommandName="Delete" runat="server">Unlock</asp:LinkButton>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="UserName" HeaderText="User Name" ReadOnly="True" SortExpression="UserName" />
    <asp:CheckBoxField DataField="IsLockedOut" HeaderText="Locked Out" ReadOnly="True" SortExpression="IsLockedOut" />
    <asp:BoundField DataField="LastLockoutDate" HeaderText="Last Lockout" SortExpression="LastLockoutDate" ReadOnly="True" />
    <asp:BoundField DataField="failedPasswordAttemptCount" HeaderText="Failed Password Attempts" SortExpression="failedPasswordAttemptCount" ReadOnly="True" />
  </Columns>
  <EmptyDataTemplate>
    No users are locked out at this time.
  </EmptyDataTemplate>
</asp:GridView>

这是我写的旧存储过程,由gridview使用。这一切都可以做得更好,但这是我当时所做的,而且效果很好。

CREATE PROCEDURE [dbo].[selLockedOutUsers]

AS

SELECT 
m.ApplicationId as applicationId,
a.ApplicationName as applicationName,
m.UserId as userId,
u.UserName as UserName,
m.IsLockedOut as isLockedOut,
m.LastLoginDate as lastLoginDate,
m.LastLockoutDate as lastLockoutDate,
m.FailedPasswordAttemptCount as failedPasswordAttemptCount

FROM 
aspnet_Membership m 
JOIN aspnet_Users u ON m.UserId = u.UserId
JOIN aspnet_Applications a ON m.ApplicationId = a.ApplicationId

WHERE 
m.IsLockedOut = '1'

这是我修改过的aspnet_Membership_UnlockUser存储过程。如您所见,我删除了应用程序名称参数,并手动将其设置在proc中。这样我只需要将用户名作为参数传递。

ALTER PROCEDURE [dbo].[aspnet_Membership_UnlockUser]
    --@ApplicationName                         nvarchar(256), --replaced with '/'
    @UserName                                nvarchar(256)
AS
BEGIN
    DECLARE @UserId uniqueidentifier
    SELECT  @UserId = NULL
    SELECT  @UserId = u.UserId
    FROM    dbo.aspnet_Users u, dbo.aspnet_Applications a, dbo.aspnet_Membership m
    WHERE   LoweredUserName = LOWER(@UserName) AND
            u.ApplicationId = a.ApplicationId  AND
            LOWER('/') = a.LoweredApplicationName AND
            u.UserId = m.UserId

    IF ( @UserId IS NULL )
        RETURN 1

    UPDATE dbo.aspnet_Membership
    SET IsLockedOut = 0,
        FailedPasswordAttemptCount = 0,
        FailedPasswordAttemptWindowStart = CONVERT( datetime, '17540101', 112 ),
        FailedPasswordAnswerAttemptCount = 0,
        FailedPasswordAnswerAttemptWindowStart = CONVERT( datetime, '17540101', 112 ),
        LastLockoutDate = CONVERT( datetime, '17540101', 112 )
    WHERE @UserId = UserId

    RETURN 0
END

答案 4 :(得分:0)

本教程可能有所帮助,您可能需要快速完成本系列:

Unlocking and Approving User Accounts