一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 如何驗證會員系統中用戶的郵箱是否真實存在

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

2020-05-12 15:42Insus.NET Sql Server

在開發網站時,我們需要對用戶注冊的郵箱進行核對與驗證,用戶填寫的郵箱是否有效郵箱。這篇文章主要介紹了如何驗證會員系統中用戶的郵箱是否真實存在的相關資料,需要的朋友可以參考下

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

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

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

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

由于你需要做2個功能,一個是要求用戶驗證郵箱有效性,也有可以以郵箱來讓用戶修改用戶密碼。因此需要創建一個表來存儲這2個類型的數據:

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

?
1
2
3
4
5
6
7
8
9
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'用戶修改密碼')

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

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

?
1
2
3
4
5
6
7
8
9
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。因此你需要對最開始的表寫一個觸發器:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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字段值:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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的,重設密碼:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

數據庫方面開發就這樣子,程序方面看你自己發揮了。

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

原文鏈接:http://www.cnblogs.com/insus/archive/2016/10/26/5996385.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美xxoo黑人又粗暴 | 女同学用白丝脚玩我的故事 | 国产精品久久久免费视频 | 高清国产激情视频在线观看 | 四虎永久免费地址在线观看 | 青春草在线观看精品免费视频 | 国产九九| 日韩精品成人a在线观看 | 色狠狠婷婷97 | 性伴交换多p | 亚洲免费在线观看视频 | 糖心vlog视频永久破解版 | 美女被网站 | 久久国产乱子伦精品免费不卡 | chinesespank打屁股| 男女乱淫真视频播放网站 | 四虎影视在线永久免费观看 | t66y地址一地址二地址三 | 国产资源中文字幕 | a黄毛片 | 亚洲天堂免费看 | 婷婷精品| 高跟翘臀老师后进式视频 | 顶级尤物极品女神福利视频 | 2019国产精品 | 天天久久综合网站 | 强波多野结衣女教师 | 百合文高h | 国产一区二区免费在线 | 国产免费一区二区三区免费视频 | 好大好长好紧爽免费 | 五月天婷婷精品免费视频 | 亚洲乱亚洲乱妇41p国产成人 | 亚洲国产日韩制服在线观看 | 亚洲欧美日韩成人 | 72张让男人一看就硬的图片 | 99视频全部看免费观 | 国产在线观看福利片 | coolgay男男gayxxx chinese壮直男gay老年人 chinese野外gay军人 | 亚洲欧美一区二区三区不卡 | 国产一级视频在线观看 |