2010-06-20 11 views
6

Sono nuovo e uso il controllo di accesso con il database utente di Visual Studio generato da ASPNETDBcome sbloccare un account utente ASPNETDB dopo il blocco del conteggio delle password errate?

ho impostato un numero massimo di password errate di 5 in web.config e verificato al punto che un account è stato bloccato. Tuttavia, non sono in grado di capire come sbloccare l'account ora.

questo problema è sul mio sito ospitato da remoto, quindi questo non è qualcosa che posso fare con lo strumento di configurazione di Visual Studio asp.net

po 'di codice C# ho potuto correre nel cs Page Load, che lascerei inserisco il nome utente e averlo sbloccato sarebbe fantastico. allora potrei fare un modulo per farlo più tardi quando ho bisogno di facilmente.

grazie in anticipo per qualsiasi aiuto.

risposta

1

Hai provato a modificare Web.config per estendere il tempo di blocco a "più tentativi" o qualcosa del genere? Forse ti lascerà in questo modo.

Non conoscerei alcun codice CSharp per te, ma uno strumento che utilizzo è lo Quality Data membership Manager Control in cui posso gestire l'appartenenza (incluso lo stato di blocco) tramite un modulo web.

Mentre questo non ti aiuterà in questo momento, dovrebbe aiutarti in futuro. Inoltre, una volta effettuato il login (dopo la scadenza del blocco), ti suggerisco di rimuovere le informazioni di blocco da Web.config fino a quando non sei pronto per l'avvio. Test approfonditi della tua applicazione sono destinati a farti bloccare ancora e ancora.

+0

+1 per il controllo Manager L'iscrizione Data Quality –

8

manualmente, nel database, andare al tavolo aspnet_membership, impostare FailedLoginPasswordAttemptCount (qualcosa dal nome simile) a zero e impostare IsLockedOut su 0 (falso).

Abbiamo creato una schermata di sicurezza personalizzata per gestirli in molte delle mie app, oppure puoi usare un componente come menzionato negli altri post.

HTH.

1

Ho un codice veramente vecchio (brutto) da un'app che ho creato qualche anno fa. È praticamente un attacco di un controllo gridview che usa il proc memorizzato aspnet_Membership_UnlockUser come comando delete con la chiave impostata come username dell'utente bloccato nella griglia. Non ho nemmeno usato C#. Ecco cosa ho:

Ecco il vecchio processo memorizzato che ho scritto utilizzato da gridview. Tutto questo può essere fatto molto meglio, ma questo è quello che ho fatto allora e funziona bene.

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' 

Di seguito è stato modificato il mio aspnet_Membership_UnlockUser stored proc. Come puoi vedere, ho rimosso il parametro del nome dell'app e l'ho impostato manualmente nel proc. In questo modo ho solo bisogno di passare il nome utente come parametro.

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

Non voglio votare su questa risposta, ma la risposta di Brian si presenta come la migliore risposta. – arame3333

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