如何驗證會員零碎中用戶的郵箱能否真實存在。本站提示廣大學習愛好者:(如何驗證會員零碎中用戶的郵箱能否真實存在)文章只能為提供參考,不一定能成為您想要的結果。以下是如何驗證會員零碎中用戶的郵箱能否真實存在正文
在開發網站時,我們需求對用戶注冊的郵箱停止核對與驗證,用戶填寫的郵箱能否無效郵箱。
好吧,我們先從數據庫動手,修正用戶表讓用戶有填寫email的字段,添加了2個字段:
ALTER TABLE [dbo].[Users] ADD [Email] VARCHAR(100) NULL, [IsVerify] BIT NOT NULL DEFAULT(0) SELECT * FROM [dbo].[Users]
由於你需求做2個功用,一個是要求用戶驗證郵箱無效性,也有可以以郵箱來讓用戶修正用戶密碼。因而需求創立一個表來存儲這2個類型的數據:
CREATE TABLE [dbo].[RequestActionType] ( [Type] NVARCHAR(2) NOT NULL PRIMARY KEY, [Description] NVARCHAR(30) NULL ) GO INSERT INTO [dbo].[RequestActionType] ([Type],[Description]) VALUES ('V',N'驗證郵箱能否無效。'), ('C',N'用戶修正密碼')
接上去,你還需求創立另外一張表,是記用戶懇求的事情,記載用戶的一些信息,如帳號,郵箱,鏈接有時效性等:
CREATE TABLE [dbo].[UserRequestAction]( [Type] NVARCHAR(2) NOT NULL FOREIGN KEY REFERENCES [dbo].[RequestActionType] ([Type]), [Token] [uniqueidentifier] NOT NULL DEFAULT(NEWID()), [Account] [nvarchar](30) NOT NULL, [Email] [nvarchar](150) NOT NULL, [Expire] [datetime] NOT NULL DEFAULT (DATEADD(day,(1),CURRENT_TIMESTAMP)), ) GO Source Code
當用戶更改郵箱成功時,需求同進對[IsVerify] 更改為false。因而你需求對最開端的表寫一個觸發器:
CREATE TRIGGER [dbo].[tri_Users_Update] ON [dbo].[Users] FOR UPDATE AS DECLARE @U_nbr NVARCHAR(20),@IsVerify BIT DECLARE @old_email VARCHAR(100),@new_email VARCHAR(100) SELECT @new_email = [Email] FROM INSERTED SELECT @U_nbr = [U_nbr],@old_email = [Email],@IsVerify = [IsVerify] FROM DELETED IF @IsVerify = 1 AND (lEN(ISNULL(@new_email,'')) = 0 OR @new_email <> @old_email) UPDATE [dbo].[Users] SET [IsVerify] = 0 WHERE [U_nbr] = @U_nbr GO Source Code
當用戶收回驗證郵箱或是更改密碼時,讓順序執行上面的存儲進程:
CREATE PROCEDURE [dbo].[usp_UserRequestAction_Request] ( @Type NVARCHAR(2), @U_nbr NVARCHAR(20) ) AS IF NOT EXISTS(SELECT TOP 1 1 FROM [dbo].[Users] WHERE [U_nbr] = @U_nbr) BEGIN RAISERROR(N'帳號錯誤或不存存在,請聯絡零碎管理員。',16,1) RETURN END DECLARE @Email NVARCHAR(100) SELECT @Email = [Email] FROM [dbo].[Users] WHERE [U_nbr] = @U_nbr IF EXISTS(SELECT TOP 1 1 FROM [dbo].[UserRequestAction] WHERE [Type] = @Type AND [Account] = @U_nbr AND [Email] = @Email) UPDATE [dbo].[UserRequestAction] SET [Token] = NEWID(),[Expire] = DATEADD(day,(1),CURRENT_TIMESTAMP) WHERE [Type] = @Type AND [Account] = @U_nbr AND [Email] = @Email ELSE INSERT INTO [dbo].[UserRequestAction] ([Type],[Account],[Email]) VALUES (@Type,@U_nbr,@Email) GO Source Code
用戶驗證郵箱無效性,是在登錄之後停止的,因而只需求點擊“驗證”铵鈕即可,零碎即發送驗證的郵件至用戶的郵箱中。
另外,當用戶遺忘密碼時,是在沒有登錄零碎之下停止的,因而需求輸出用戶的帳號才干停止下一步。
均是運用這個存儲進程[dbo].[usp_UserRequestAction_Request]。
接上去的流程是,用戶會翻開他的郵箱,查閱剛剛零碎發送的郵件。郵件內容就是看實踐需求了,如提示用戶,是不是自己自己操作,平安性等,這些都不是怎樣重要,重要的是那一條鏈接。
指示用戶點擊鏈接。這個鏈接會導上到網站一個頁面。當到這個頁面時,零碎會在這頁面停止一些順序處置,反省鏈接無效性,時間能否過時,假如一切沒有問題,會進更新IsVerify字段為ture.
假如是用戶遺忘密碼的話,在用戶點擊鏈接,零碎也會檢無效性,沒有期,面會呈現更改密碼的form,讓用戶停止更改全新的密碼。
Ok,還差2個存儲進程,第一個是更新IsVerify字段值:
CREATE PROCEDURE [dbo].[usp_Users_UpdateIsVerifyField] ( @token NVARCHAR(36) ) AS IF EXISTS(SELECT TOP 1 1 FROM [dbo].[UserRequestAction] WHERE [Token] = @token AND [Expire] >= CURRENT_TIMESTAMP) BEGIN DECLARE @Account NVARCHAR(30) SELECT @Account = [Account] FROM [dbo].[UserRequestAction] WHERE [Token] = @token UPDATE [dbo].[Users] SET [IsVerify] = 1 WHERE [U_nbr] = @Account UPDATE [dbo].[UserRequestAction] SET [Expire] = DATEADD(DAY,-1,CURRENT_TIMESTAMP) WHERE [Token] = @token END GO Source Code
另一個是ResetPassword的,重設密碼:
CREATE PROCEDURE [dbo].[usp_Users_ResetPassword] ( @token NVARCHAR(36), @Password NVARCHAR(100) ) AS IF EXISTS(SELECT TOP 1 1 FROM [dbo].[UserRequestAction] WHERE [Token] = @token AND [Expire] >= CURRENT_TIMESTAMP) BEGIN DECLARE @Account NVARCHAR(30) SELECT @Account = [Account] FROM [dbo].[UserRequestAction] WHERE [Token] = @token DECLARE @pwd VARBINARY(MAX) = ENCRYPTBYPASSPHRASE('insus#sec!%y',@Password) UPDATE [dbo].[Users] SET [Pwd] = @pwd WHERE [U_nbr] = @Account UPDATE [dbo].[UserRequestAction] SET [Expire] = DATEADD(DAY,-1,CURRENT_TIMESTAMP) WHERE [Token] = @token END ELSE BEGIN RAISERROR(N'無法更改密碼,請聯絡客服或網絡管理員。',16,1) RETURN END Source Code
數據庫方面開發就這樣子,順序方面看你自己發揚了。
以上所述是給大家引見的驗證會員零碎中用戶的郵箱能否真實存在的辦法,希望對大家有所協助,假如大家有任何疑問請給我留言,會及時回復大家的。在此也十分感激大家對網站的支持!