aspnet_Membership_ResetPassword

本文介绍了一个用于ASP.NET应用程序中会员重置密码的存储过程实现细节,包括事务处理、密码验证与更新机制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1None.gifALTER  PROCEDURE dbo.aspnet_Membership_ResetPassword
  2None.gif    @ApplicationName             NVARCHAR(256),
  3None.gif    @UserName                    NVARCHAR(256),
  4None.gif    @NewPassword                 NVARCHAR(128),
  5None.gif    @MaxInvalidPasswordAttempts  INT,
  6None.gif    @PasswordAttemptWindow       INT,
  7None.gif    @PasswordSalt                NVARCHAR(128),
  8None.gif    @TimeZoneAdjustment          INT,
  9None.gif    @PasswordFormat              INT = 0,
 10None.gif    @PasswordAnswer              NVARCHAR(128= NULL
 11None.gifAS
 12None.gifBEGIN
 13None.gif    DECLARE @IsLockedOut                            BIT
 14None.gif    DECLARE @LastLockoutDate                        DATETIME
 15None.gif    DECLARE @FailedPasswordAttemptCount             INT
 16None.gif    DECLARE @FailedPasswordAttemptWindowStart       DATETIME
 17None.gif    DECLARE @FailedPasswordAnswerAttemptCount       INT
 18None.gif    DECLARE @FailedPasswordAnswerAttemptWindowStart DATETIME
 19ExpandedBlockStart.gifContractedBlock.gif    /**//*声明一大堆变量,对于密码操作的*/     
 20None.gif
 21None.gif
 22None.gif
 23None.gif    DECLARE @UserId                                 UNIQUEIDENTIFIER
 24None.gif    SET     @UserId = NULL
 25None.gif
 26None.gif    DECLARE @ErrorCode     INT
 27None.gif    SET @ErrorCode = 0
 28None.gif
 29None.gif    DECLARE @TranStarted   BIT
 30None.gif    SET @TranStarted = 0
 31None.gif
 32None.gif    IF@@TRANCOUNT = 0 ) --如果当前活动事务数为0,则开始事务,并设置事务参数为1
 33None.gif    BEGIN
 34None.gif        BEGIN TRANSACTION
 35None.gif        SET @TranStarted = 1
 36None.gif    END
 37None.gif    ELSE
 38None.gif        SET @TranStarted = 0
 39None.gif
 40None.gif    SELECT  @UserId = u.UserId
 41None.gif    FROM    dbo.aspnet_Users u, dbo.aspnet_Applications a, dbo.aspnet_Membership m
 42None.gif    WHERE   LoweredUserName = LOWER(@UserNameAND
 43None.gif            u.ApplicationId = a.ApplicationId  AND
 44None.gif            LoweredApplicationName = a.LoweredApplicationName AND
 45None.gif            u.UserId = m.UserId
 46ExpandedBlockStart.gifContractedBlock.gif      /**//*查询符合条件用户名的用户的用户ID*/
 47None.gif    IF ( @UserId IS NULL ) --如果ID不存在,回滚事务
 48None.gif    BEGIN
 49None.gif        SET @ErrorCode = 1
 50None.gif        GOTO Cleanup
 51None.gif    END
 52None.gif
 53None.gif    SELECT @IsLockedOut = IsLockedOut,
 54None.gif           @LastLockoutDate = LastLockoutDate,
 55None.gif           @FailedPasswordAttemptCount = FailedPasswordAttemptCount,
 56None.gif           @FailedPasswordAttemptWindowStart = FailedPasswordAttemptWindowStart,
 57None.gif           @FailedPasswordAnswerAttemptCount = FailedPasswordAnswerAttemptCount,
 58None.gif           @FailedPasswordAnswerAttemptWindowStart = FailedPasswordAnswerAttemptWindowStart
 59None.gif    FROM dbo.aspnet_Membership WITH ( UPDLOCK )
 60None.gif    WHERE @UserId = UserId
 61ExpandedBlockStart.gifContractedBlock.gif    /**//*查询符合此用户的用户ID的字段(查询结果是上面声明的变量列表)*/
 62None.gif
 63None.gif    IF@IsLockedOut = 1 ) --如果用户被锁定,又回滚
 64None.gif    BEGIN
 65None.gif        SET @ErrorCode = 99
 66None.gif        GOTO Cleanup
 67None.gif    END
 68None.gif
 69None.gif    DECLARE @DateTimeNowUTC DATETIME
 70None.gif    EXEC dbo.aspnet_GetUtcDate @TimeZoneAdjustment@DateTimeNowUTC OUTPUT
 71None.gif
 72None.gif    UPDATE dbo.aspnet_Membership
 73None.gif    SET    Password = @NewPassword,
 74None.gif           LastPasswordChangedDate = @DateTimeNowUTC,
 75None.gif           PasswordFormat = @PasswordFormat,
 76None.gif           PasswordSalt = @PasswordSalt
 77None.gif    WHERE  @UserId = UserId AND
 78None.gif           ( ( @PasswordAnswer IS NULL ) OR ( LOWER( PasswordAnswer ) = LOWER@PasswordAnswer ) ) )
 79None.gif            -----密码答案为空或密码答案等于输入参数
 80ExpandedBlockStart.gifContractedBlock.gif      /**//*更新表中字段,包括密码,格式化密码等。*/
 81None.gif
 82None.gif
 83None.gif
 84None.gif    IF ( @@ROWCOUNT = 0 )----如果受影响行数为0,即未更新
 85None.gif        BEGIN
 86None.gif            IF@DateTimeNowUTC > DATEADD( minute, @PasswordAttemptWindow@FailedPasswordAnswerAttemptWindowStart ) )
 87None.gif            BEGIN
 88None.gif                SET @FailedPasswordAnswerAttemptWindowStart = @DateTimeNowUTC
 89None.gif                SET @FailedPasswordAnswerAttemptCount = 1
 90None.gif            END
 91None.gif            ELSE
 92None.gif            BEGIN
 93None.gif                SET @FailedPasswordAnswerAttemptWindowStart = @DateTimeNowUTC
 94None.gif                SET @FailedPasswordAnswerAttemptCount = @FailedPasswordAnswerAttemptCount + 1
 95None.gif            END
 96None.gif            
 97None.gif            BEGIN
 98None.gif                IF@FailedPasswordAnswerAttemptCount >= @MaxInvalidPasswordAttempts )
 99None.gif                BEGIN
100None.gif                    SET @IsLockedOut = 1
101None.gif                    SET @LastLockoutDate = @DateTimeNowUTC
102None.gif                END
103None.gif            END
104None.gif
105None.gif            SET @ErrorCode = 3
106None.gif        END
107None.gif    ELSE
108None.gif        BEGIN
109None.gif            IF@FailedPasswordAnswerAttemptCount > 0 )
110None.gif            BEGIN
111None.gif                SET @FailedPasswordAnswerAttemptCount = 0
112None.gif                SET @FailedPasswordAnswerAttemptWindowStart = CONVERTDATETIME'17540101'112 )
113None.gif            END
114None.gif        END
115ExpandedBlockStart.gifContractedBlock.gif    /**//*此IF块又是处理密码尝试和锁定相关的,如果更新成功就不执行此IF快*/
116None.gif
117None.gif
118None.gif    IFNOT ( @PasswordAnswer IS NULL ) ) --如果密码答案不为空
119None.gif    BEGIN
120None.gif        UPDATE dbo.aspnet_Membership
121None.gif        SET IsLockedOut = @IsLockedOut, LastLockoutDate = @LastLockoutDate,
122None.gif            FailedPasswordAttemptCount = @FailedPasswordAttemptCount,
123None.gif            FailedPasswordAttemptWindowStart = @FailedPasswordAttemptWindowStart,
124None.gif            FailedPasswordAnswerAttemptCount = @FailedPasswordAnswerAttemptCount,
125None.gif            FailedPasswordAnswerAttemptWindowStart = @FailedPasswordAnswerAttemptWindowStart
126None.gif        WHERE @UserId = UserId
127None.gif       
128None.gif        IF@@ERROR <> 0 )
129None.gif        BEGIN
130None.gif            SET @ErrorCode = -1
131None.gif            GOTO Cleanup
132None.gif        END
133None.gif    END
134None.gif
135None.gif    IF@TranStarted = 1 )
136None.gif    BEGIN
137None.gif    SET @TranStarted = 0
138None.gif    COMMIT TRANSACTION
139None.gif    END
140None.gif
141None.gif    RETURN @ErrorCode
142None.gif
143None.gifCleanup:
144None.gif
145None.gif    IF@TranStarted = 1 )
146None.gif    BEGIN
147None.gif        SET @TranStarted = 0
148None.gif        ROLLBACK TRANSACTION
149None.gif    END
150None.gif
151None.gif    RETURN @ErrorCode
152None.gif
153None.gifEND
154None.gif

转载于:https://www.cnblogs.com/ruanbl/archive/2006/08/31/491039.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值