濮阳杆衣贸易有限公司

主頁 > 知識庫 > 如何驗證會員系統(tǒng)中用戶的郵箱是否真實存在

如何驗證會員系統(tǒng)中用戶的郵箱是否真實存在

熱門標簽:家庭農(nóng)場地圖標注名稱怎樣起名 電銷需要外呼系統(tǒng)嗎 我要地圖標注數(shù)量有限制嗎 安卡拉地圖標注app 千呼電話機器人可以試用嗎 零成本地圖標注賺錢 400電話辦理泰安 電話機器人怎么代理商 互聯(lián)網(wǎng)電話外呼系統(tǒng)

在開發(fā)網(wǎng)站時,我們需要對用戶注冊的郵箱進行核對與驗證,用戶填寫的郵箱是否有效郵箱。

好吧,我們先從數(shù)據(jù)庫入手,修改用戶表讓用戶有填寫email的字段,添加了2個字段:

ALTER TABLE [dbo].[Users]
ADD [Email] VARCHAR(100) NULL, 
[IsVerify] BIT NOT NULL DEFAULT(0)
 SELECT * FROM [dbo].[Users]

由于你需要做2個功能,一個是要求用戶驗證郵箱有效性,也有可以以郵箱來讓用戶修改用戶密碼。因此需要創(chuàng)建一個表來存儲這2個類型的數(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'驗證郵箱是否有效。'),
('C',N'用戶修改密碼')

接下來,你還需要創(chuàng)建另外一張表,是記用戶請求的事件,記錄用戶的一些信息,如帳號,郵箱,鏈接有時效性等:

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。因此你需要對最開始的表寫一個觸發(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

當用戶發(fā)出驗證郵箱或是更改密碼時,讓程序執(zhí)行下面的存儲過程:

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'帳號錯誤或不存存在,請聯(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

用戶驗證郵箱有效性,是在登錄之后進行的,因此只需要點擊“驗證”銨鈕即可,系統(tǒng)即發(fā)送驗證的郵件至用戶的郵箱中。
另外,當用戶忘記密碼時,是在沒有登錄系統(tǒng)之下進行的,因此需要輸入用戶的帳號才能進行下一步。

均是使用這個存儲過程[dbo].[usp_UserRequestAction_Request]。

接下來的流程是,用戶會打開他的郵箱,查閱剛剛系統(tǒng)發(fā)送的郵件。郵件內(nèi)容就是看實際需求了,如提示用戶,是不是自己本人操作,安全性等,這些都不是怎樣重要,重要的是那一條鏈接。

指示用戶點擊鏈接。這個鏈接會導(dǎo)上到網(wǎng)站一個頁面。當?shù)竭@個頁面時,系統(tǒng)會在這頁面進行一些程序處理,檢查鏈接有效性,時間是否過期,如果一切沒有問題,會進更新IsVerify字段為ture.

如果是用戶忘記密碼的話,在用戶點擊鏈接,系統(tǒng)也會檢有效性,沒有期,面會出現(xiàn)更改密碼的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的,重設(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'無法更改密碼,請聯(lián)系客服或網(wǎng)絡(luò)管理員。',16,1)
  RETURN
END
Source Code

數(shù)據(jù)庫方面開發(fā)就這樣子,程序方面看你自己發(fā)揮了。

以上所述是小編給大家介紹的驗證會員系統(tǒng)中用戶的郵箱是否真實存在的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • jquery css實現(xiàn)郵箱自動補全
  • Java實現(xiàn)郵箱找回密碼實例代碼
  • 在js中實現(xiàn)郵箱格式的驗證方法(推薦)
  • jQuery驗證手機號郵箱身份證的正則表達式(含港澳臺)
  • jQuery實現(xiàn)郵箱下拉列表自動補全功能
  • 微信小程序-詳解微信登陸、微信支付、模板消息
  • JavaWeb登陸功能實現(xiàn)代碼
  • php實現(xiàn)登陸模塊功能示例
  • 用AJAX實現(xiàn)頁面登陸以及注冊用戶名驗證的簡單實例
  • js表單登陸驗證示例
  • 根據(jù)輸入郵箱號跳轉(zhuǎn)到相應(yīng)登錄地址的解決方法

標簽:濱州 東營 來賓 新鄉(xiāng) 大同 池州 黃山 文山

巨人網(wǎng)絡(luò)通訊聲明:本文標題《如何驗證會員系統(tǒng)中用戶的郵箱是否真實存在》,本文關(guān)鍵詞  如何,驗證,會員,系統(tǒng),中,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何驗證會員系統(tǒng)中用戶的郵箱是否真實存在》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何驗證會員系統(tǒng)中用戶的郵箱是否真實存在的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    定襄县| 措美县| 枣庄市| 泽普县| 榕江县| 彭阳县| 崇州市| 阜康市| 工布江达县| 秦安县| 静安区| 绥阳县| 衡水市| 鹤壁市| 澜沧| 新化县| 巴林左旗| 蓬安县| 新巴尔虎右旗| 丰原市| 卢龙县| 辛集市| 山西省| 蕲春县| 万年县| 蒙山县| 比如县| 桃园市| 德钦县| 天水市| 屏东县| 刚察县| 卢氏县| 营口市| 新余市| 临洮县| 萍乡市| 永城市| 定陶县| 金昌市| 黔西县|