2010-06-20 100 views
6

我是新來的,並使用ASPNETDB visual studio生成的用戶數據庫的登錄控制如何在密碼錯誤計數鎖定後解鎖ASPNETDB用戶帳戶?

我在web.config中設置了最大不良密碼數爲5,並測試了一個帳戶被鎖定的點。然而,我現在無法弄清楚如何解鎖帳戶。

這個問題是在我的遠程託管的網站,所以這不是我可以與Visual Studio asp.net配置工具

一些C#代碼,我可能會在的.cs的Page_Load運行做的,它可以讓我輸入用戶名並讓它解鎖會很好。那麼當我需要輕鬆的時候,我就可以製作一張表格。

在此先感謝您的幫助。

回答

1

你有沒有試圖改變在Web.config延長鎖定時間,以「更多的嘗試」或類似的東西?也許它會讓你這樣。

我不會爲你知道任何CSharp代碼,但我使用的工具是Quality Data membership Manager Control,我可以在其中通過Web表單管理成員資格(包括鎖定狀態)。

雖然這不會幫助你,現在,它應該幫助你在未來。另外,一旦你可以登錄(你鎖定到期後)再次,我想,直到你準備去住建議刪除從Web.config鎖定信息。廣泛的應用程序測試必然會讓你一次又一次地被鎖定。

+0

+1質量數據的會員經理控制 – 2010-12-04 11:48:56

8

手動,在數據庫中,轉到aspnet_membership表中,設置FailedLoginPasswordAttemptCount(類似名稱)爲零,將IsLockedOut設置爲0(假)。

我們創建了一個自定義的安全屏幾個我的應用程序來管理這些,或者你可以使用一個組件像其他職位提到。

HTH。

1

我有一個應用程序的一些很老的(醜陋的)的代碼,我建立了一個幾年前。這幾乎是它使用aspnet_Membership_UnlockUser存儲過程與設置在gridrow,被鎖定的用戶的用戶名的關鍵delete命令GridView控件的黑客攻擊了。我甚至沒有使用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] 
    [email protected]       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 
+0

我不想下來投票這個答案,但布賴恩答案看起來像最好的答案。 – arame3333 2013-02-18 10:25:42

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