我是新手,使用 ASPNETDB Visual Studio 生成的用户数据库的登录控件
我在 web.config 中将最大错误密码计数设置为 5,并测试到帐户被锁定的程度。但是,我现在无法弄清楚如何解锁该帐户。
这个问题在我的远程托管站点上,所以这不是我可以用 Visual Studio asp.net 配置工具做的事情
我可以在 .cs page_load 中运行一些 c# 代码,这可以让我输入用户名并解锁它会很棒。然后我可以制作一个表格,以便以后需要时轻松完成。
提前感谢您的帮助。
我是新手,使用 ASPNETDB Visual Studio 生成的用户数据库的登录控件
我在 web.config 中将最大错误密码计数设置为 5,并测试到帐户被锁定的程度。但是,我现在无法弄清楚如何解锁该帐户。
这个问题在我的远程托管站点上,所以这不是我可以用 Visual Studio asp.net 配置工具做的事情
我可以在 .cs page_load 中运行一些 c# 代码,这可以让我输入用户名并解锁它会很棒。然后我可以制作一个表格,以便以后需要时轻松完成。
提前感谢您的帮助。
MembershipUser usr = Membership.GetUser(userName);
usr.UnlockUser();
手动,在数据库中,转到 aspnet_membership 表,将FailedLoginPasswordAttemptCount(类似的名称)设置为零并设置IsLockedOut为 0(假)。
我们创建了一个自定义安全屏幕来管理我的几个应用程序中的这些,或者您可以使用其他帖子中提到的组件。
HTH。
我几年前构建的应用程序中有一些非常旧(丑陋)的代码。这几乎是一个 gridview 控件的破解,它使用 aspnet_Membership_UnlockUser 存储的过程作为删除命令,并将键设置为网格行中锁定用户的用户名。我什至没有使用 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
您是否尝试过更改 Web.config 以将锁定时间延长到“更多尝试”或类似的东西?也许它会让你那样做。
我不知道您有任何 CSharp 代码,但我使用的一个工具是Quality Data members Manager Control,我可以在其中通过 Web 表单管理成员身份(包括锁定状态)。
虽然这对您现在没有帮助,但它应该在将来对您有所帮助。此外,一旦您可以再次登录(锁定到期后),我建议您从 Web.config 中删除锁定信息,直到您准备好上线。对您的应用程序进行广泛的测试势必会让您一次又一次地被拒之门外。
本教程可能会有所帮助,您可能需要快速完成该系列: