7

私は新しく、ASPNETDBビジュアルスタジオで生成されたユーザーデータベースでログインコントロールを使用しています

web.config で不正なパスワードの最大数を 5 に設定し、アカウントがロックアウトされるまでテストしました。ただし、現在アカウントのロックを解除する方法がわかりません。

この問題は、リモートでホストされているサイトにあるため、Visual Studio の asp.net 構成ツールでできることではありません。

.cs page_load で実行できるいくつかの C# コードを使用すると、ユーザー名を入力してロックを解除できます。その後、後で簡単に必要なときにフォームを作成できます。

助けてくれてありがとう。

4

5 に答える 5

12
  MembershipUser usr = Membership.GetUser(userName);
  usr.UnlockUser();
于 2011-10-25T16:09:32.233 に答える
9

手動で、データベースで aspnet_membership テーブルに移動し、FailedLoginPasswordAttemptCount(同様の名前のもの) を 0 に設定IsLockedOutし、0 (false) に設定します。

私のアプリのいくつかでこれらを管理するためのカスタム セキュリティ画面を作成しました。または、他の投稿で言及されているようなコンポーネントを使用することもできます。

HTH。

于 2010-06-21T01:11:41.637 に答える
1

Web.config を変更して、ロックアウト時間を「試行回数を増やす」などに延長しようとしましたか? 多分それはあなたをそのようにさせます。

CSharp のコードはわかりませんが、私が使用しているツールは、Web フォームを介してメンバーシップ (ロック ステータスを含む) を管理できるQuality Data Membership Manager Controlです。

これは現時点では役に立ちませんが、将来的には役立つはずです。また、(ロックアウトの有効期限が切れた後) 再度ログインできるようになったら、ライブに移行する準備が整うまで、Web.config からロックアウト情報を削除することをお勧めします。アプリケーションを徹底的にテストすると、何度もロックアウトされてしまいます。

于 2010-06-20T23:27:01.010 に答える
1

数年前に作成したアプリの非常に古い (醜い) コードがあります。これは、グリッド行でロックアウトされたユーザーのユーザー名として設定されたキーを使用して、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>

これは、グリッドビューで使用される、私が書いた古いストアド プロシージャです。これはすべて、はるかに優れた方法で実行できますが、これは私が当時行ったことであり、うまく機能しています。

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
于 2011-03-25T13:52:24.770 に答える
0

このチュートリアルが役立つ場合があります。シリーズをすばやく実行する必要がある場合があります。

ユーザー アカウントのロック解除と承認

于 2010-06-20T23:53:57.177 に答える