如何驗(yàn)證會(huì)員系統(tǒng)中用戶(hù)的郵箱是否真實(shí)存在
在開(kāi)發(fā)網(wǎng)站時(shí),我們需要對(duì)用戶(hù)注冊(cè)的郵箱進(jìn)行核對(duì)與驗(yàn)證,用戶(hù)填寫(xiě)的郵箱是否有效郵箱。
好吧,我們先從數(shù)據(jù)庫(kù)入手,修改用戶(hù)表讓用戶(hù)有填寫(xiě)email的字段,添加了2個(gè)字段:
ALTER TABLE [dbo].[Users] ADD [Email] VARCHAR(100) NULL, [IsVerify] BIT NOT NULL DEFAULT(0) SELECT * FROM [dbo].[Users]
由于你需要做2個(gè)功能,一個(gè)是要求用戶(hù)驗(yàn)證郵箱有效性,也有可以以郵箱來(lái)讓用戶(hù)修改用戶(hù)密碼。因此需要?jiǎng)?chuàng)建一個(gè)表來(lái)存儲(chǔ)這2個(gè)類(lèi)型的數(shù)據(jù):
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'驗(yàn)證郵箱是否有效。'), ('C',N'用戶(hù)修改密碼')
接下來(lái),你還需要?jiǎng)?chuàng)建另外一張表,是記用戶(hù)請(qǐng)求的事件,記錄用戶(hù)的一些信息,如帳號(hào),郵箱,鏈接有時(shí)效性等:
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
當(dāng)用戶(hù)更改郵箱成功時(shí),需要同進(jìn)對(duì)[IsVerify] 更改為false。因此你需要對(duì)最開(kāi)始的表寫(xiě)一個(gè)觸發(fā)器:
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
當(dāng)用戶(hù)發(fā)出驗(yàn)證郵箱或是更改密碼時(shí),讓程序執(zhí)行下面的存儲(chǔ)過(guò)程:
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'帳號(hào)錯(cuò)誤或不存存在,請(qǐng)聯(lián)系系統(tǒng)管理員。',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
用戶(hù)驗(yàn)證郵箱有效性,是在登錄之后進(jìn)行的,因此只需要點(diǎn)擊“驗(yàn)證”銨鈕即可,系統(tǒng)即發(fā)送驗(yàn)證的郵件至用戶(hù)的郵箱中。
另外,當(dāng)用戶(hù)忘記密碼時(shí),是在沒(méi)有登錄系統(tǒng)之下進(jìn)行的,因此需要輸入用戶(hù)的帳號(hào)才能進(jìn)行下一步。
均是使用這個(gè)存儲(chǔ)過(guò)程[dbo].[usp_UserRequestAction_Request]。
接下來(lái)的流程是,用戶(hù)會(huì)打開(kāi)他的郵箱,查閱剛剛系統(tǒng)發(fā)送的郵件。郵件內(nèi)容就是看實(shí)際需求了,如提示用戶(hù),是不是自己本人操作,安全性等,這些都不是怎樣重要,重要的是那一條鏈接。
指示用戶(hù)點(diǎn)擊鏈接。這個(gè)鏈接會(huì)導(dǎo)上到網(wǎng)站一個(gè)頁(yè)面。當(dāng)?shù)竭@個(gè)頁(yè)面時(shí),系統(tǒng)會(huì)在這頁(yè)面進(jìn)行一些程序處理,檢查鏈接有效性,時(shí)間是否過(guò)期,如果一切沒(méi)有問(wèn)題,會(huì)進(jìn)更新IsVerify字段為ture.
如果是用戶(hù)忘記密碼的話(huà),在用戶(hù)點(diǎn)擊鏈接,系統(tǒng)也會(huì)檢有效性,沒(méi)有期,面會(huì)出現(xiàn)更改密碼的form,讓用戶(hù)進(jìn)行更改全新的密碼。
Ok,還差2個(gè)存儲(chǔ)過(guò)程,第一個(gè)是更新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
另一個(gè)是ResetPassword的,重設(shè)密碼:
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'無(wú)法更改密碼,請(qǐng)聯(lián)系客服或網(wǎng)絡(luò)管理員。',16,1) RETURN END Source Code
數(shù)據(jù)庫(kù)方面開(kāi)發(fā)就這樣子,程序方面看你自己發(fā)揮了。
以上所述是小編給大家介紹的驗(yàn)證會(huì)員系統(tǒng)中用戶(hù)的郵箱是否真實(shí)存在的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- jquery css實(shí)現(xiàn)郵箱自動(dòng)補(bǔ)全
- Java實(shí)現(xiàn)郵箱找回密碼實(shí)例代碼
- 在js中實(shí)現(xiàn)郵箱格式的驗(yàn)證方法(推薦)
- jQuery驗(yàn)證手機(jī)號(hào)郵箱身份證的正則表達(dá)式(含港澳臺(tái))
- jQuery實(shí)現(xiàn)郵箱下拉列表自動(dòng)補(bǔ)全功能
- 微信小程序-詳解微信登陸、微信支付、模板消息
- JavaWeb登陸功能實(shí)現(xiàn)代碼
- php實(shí)現(xiàn)登陸模塊功能示例
- 用AJAX實(shí)現(xiàn)頁(yè)面登陸以及注冊(cè)用戶(hù)名驗(yàn)證的簡(jiǎn)單實(shí)例
- js表單登陸驗(yàn)證示例
- 根據(jù)輸入郵箱號(hào)跳轉(zhuǎn)到相應(yīng)登錄地址的解決方法
相關(guān)文章
在Sql Server中調(diào)用外部EXE執(zhí)行程序引發(fā)的問(wèn)題
這篇文章主要介紹了在Sql Server中調(diào)用外部EXE執(zhí)行程序引發(fā)的問(wèn)題及解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08還原sql server數(shù)據(jù)庫(kù)的處理方法
把數(shù)據(jù)庫(kù)的備份文件放到服務(wù)器的任意目錄下先, 然后按下面的步驟一步一步做。2013-03-03隱藏在SQLServer 字段中的超詭異字符解決過(guò)程
這套系統(tǒng)做了大半年,這個(gè)導(dǎo)入導(dǎo)出還是問(wèn)題不斷,我負(fù)責(zé)的這塊導(dǎo)入導(dǎo)出就是夾在網(wǎng)絡(luò)版和單機(jī)版系統(tǒng)之間,只要任何一邊對(duì)數(shù)據(jù)庫(kù)做了改動(dòng)這個(gè)導(dǎo)入導(dǎo)出就會(huì)失敗。哎,煩心的事不止這些,最近又遇到了一個(gè)非常奇怪的問(wèn)題。2009-10-10Excel導(dǎo)入Sqlserver數(shù)據(jù)庫(kù)腳本
簡(jiǎn)單但很實(shí)用的一段SQL腳本,相信大家在做新舊系統(tǒng)升級(jí)時(shí)會(huì)經(jīng)常用到.2009-10-10jdbc使用PreparedStatement批量插入數(shù)據(jù)的方法
這篇文章主要介紹了jdbc使用PreparedStatement批量插入數(shù)據(jù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04SQL Server 分頁(yè)查詢(xún)通用存儲(chǔ)過(guò)程(只做分頁(yè)查詢(xún)用)
這段存儲(chǔ)過(guò)程寫(xiě)得SQL代碼很不錯(cuò),在這個(gè)基礎(chǔ)上,按照我的習(xí)慣以及思維方式,調(diào)整了代碼,只做分頁(yè)查詢(xún)用2014-07-07SQL?Server?字段設(shè)自增的實(shí)現(xiàn)流程
這篇文章主要介紹了SQL?Server?字段設(shè)自增的實(shí)現(xiàn)方法,在本文中,我將先向你展示整個(gè)實(shí)現(xiàn)的流程,然后逐步解釋每個(gè)步驟需要做什么,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2023-12-12SQL Server中將數(shù)據(jù)導(dǎo)出為XML和Json方法分享
這篇文章主要介紹了SQL Server中將數(shù)據(jù)導(dǎo)出為XML和Json方法分享,本文使用PowerShell中的BCP命令實(shí)現(xiàn)導(dǎo)出為文件,需要的朋友可以參考下2015-02-02sqlserver常用命令行操作(啟動(dòng)、停止、暫停)
sqlserver常用命令行操作,方便在命令行實(shí)現(xiàn)sqlserver的啟動(dòng)、停止、暫停2011-12-12