会员系统中需要验证用户的邮箱是否真实存在

在开荒网址时,大家须要对顾客注册的信箱实行审查管理与认证,顾客填写的邮箱是不是可行邮箱。

好吧,大家先从数据库入手,修改客商表让顾客有填写email的字段,增多了2个字段:
冠亚体育手机网站 1

 

冠亚体育手机网站 2冠亚体育手机网站 3

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


 SELECT * FROM [dbo].[Users]

Source Code

是因为您需求做2个功能,三个是要求客商验证邮箱有效性,也许有可以以邮箱来让客户修改客户密码。因而供给创立一个表来存款和储蓄那2个类型的多少:
冠亚体育手机网站 4

 

冠亚体育手机网站 5冠亚体育手机网站 6

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'用户修改密码')

Source Code

 

接下去,你还亟需创建别的一张表,是记顾客伏乞的事件,记录客户的有的音讯,如帐号,邮箱,链接有的时候效性等:

冠亚体育手机网站 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。因而你需求对最早叶的表写三个触发器:
冠亚体育手机网站 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

 
当用户发生验证邮箱或是更换密码时,让程序施行下边的存放进程:

冠亚体育手机网站 13

 

冠亚体育手机网站 14冠亚体育手机网站 15

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字段值:
冠亚体育手机网站 16

 

冠亚体育手机网站 17冠亚体育手机网站 18

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的,重设密码:
冠亚体育手机网站 19

 

冠亚体育手机网站 20冠亚体育手机网站 21

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

 

 数据库方面支出就这样子,程序方面看您本身发挥了。

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注