2010-06-20 22 views
6

Jestem nowy i używam formantu logowania w bazie danych wygenerowanej przez ASPNETDB studio wizualnejak odblokować konto użytkownika ASPNETDB po zablokowaniu numeru złych haseł?

Ustawiłem maksymalną liczbę złych haseł na 5 w web.config i przetestowałem do tego stopnia, że ​​konto zostało zablokowane. nie jestem jednak w stanie dowiedzieć się, jak odblokować konto teraz.

ten problem jest na mój zdalnie hostowane miejscu, więc to nie jest coś, co mogę zrobić z konfiguratora visual studio asp.net

niektóre kod C# i może uruchomić w page_load .cs, który pozwoliłby wprowadzanie nazwy użytkownika i odblokowanie go byłoby świetne. wtedy mógłbym zrobić formularz, aby zrobić to później, kiedy muszę z łatwością.

z góry dzięki za pomoc.

Odpowiedz

1

Czy próbowałeś zmienić Web.config, aby przedłużyć czas blokady do "więcej prób" lub coś w tym stylu? Może to pozwoli ci w ten sposób.

Nie znam żadnego kodu CSharp, ale narzędziem, którego używam, jest Quality Data membership Manager Control, gdzie mogę zarządzać członkostwem (w tym stanem blokady) za pośrednictwem formularza internetowego.

To nie pomoże ci teraz, ale powinno ci pomóc w przyszłości. Ponadto, gdy będziesz mógł się ponownie zalogować (po wygaśnięciu blokady), sugeruję usunięcie informacji o blokadzie z Web.config, aż będziesz gotowy do uruchomienia. Obszerne testowanie aplikacji jest zobowiązane do ciągłego blokowania.

+0

+1 dla członkostwa Data Quality Control Manager –

8

ręcznie, w bazie danych, przejdź do tabeli aspnet_membership ustaw FailedLoginPasswordAttemptCount (coś o podobnej nazwie) do zera i ustaw IsLockedOut na 0 (fałsz).

Stworzyliśmy niestandardowy ekran bezpieczeństwa do zarządzania tymi aplikacjami w kilku moich aplikacjach lub możesz użyć komponentu takiego jak wspomniany w innych wpisach.

HTH.

1

Mam kilka naprawdę starych (brzydki) kod z aplikacji, którą zbudowałem kilka lat temu. Jest to prawie hack up kontroli gridview, który używa procnet_Membership_UnlockUser przechowywane proc jako polecenie delete z kluczem ustawionym jako nazwa użytkownika zablokowanego użytkownika w siatce. Nawet nie używałem C#. Oto co mam:

<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> 

oto stary przechowywane proc Pisałem, który jest używany przez GridView. To wszystko można zrobić o wiele lepiej, ale to właśnie zrobiłem wtedy i działa dobrze.

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' 

Oto mój zmodyfikowany aspnet_Membership_UnlockUser przechowywane proc. Jak widać, usunąłem parametr nazwy aplikacji i ustawiłem go ręcznie w proc. W ten sposób wystarczy podać nazwę użytkownika jako parametr.

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

nie chcą głosować w dół tę odpowiedź, ale odpowiedź Brian wygląda najlepszą odpowiedź. – arame3333

12
MembershipUser usr = Membership.GetUser(userName); 
    usr.UnlockUser(); 
Powiązane problemy