如何验证会员系统中用户的邮箱是否真实存在
在开发网站时,我们需要对用户注册的邮箱进行核对与验证,用户填写的邮箱是否有效邮箱。
好吧,我们先从数据库入手,修改用户表让用户有填写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
数据库方面开发就这样子,程序方面看你自己发挥了。
以上所述是小编给大家介绍的验证会员系统中用户的邮箱是否真实存在的方法,大家如有疑问可以留言,或者联系站长。感谢亲们支持!!!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 如何验证会员系统中用户的邮箱是否真实存在
相关文章
- 阿常:公司买的第三方系统,如何保证质量 116
- linux查看负载均衡命令_linux系统负载如何计算
- 实操!用Zabbix+500元硬件如何平替5万元动环检测系统,实现UPS温湿度烟雾等数据采集存储、告警、大屏展示?
- 如何设计属于你自己的秒杀系统?
- 虹科分享|您的遗留系统的安全性如何?
- Ubuntu 系统如何使用 root 用户登录
- 如何取消 SAP ALE 中已经配置的跨系统主数据验证
- 查询Linux系统下IP地址的方法(如何查询linuxip)
- Linux系统如何快速创建用户(linux系统创建用户)
- 系统如何在Linux系统中创建新的用户(创建用户linux)
- 如何给指定用户发送SAP系统消息-TH_POPUP详解编程语言
- Linux系统下如何创建用户(linux如何建立用户)
- Linux系统如何快速刷新时间(linux刷新系统时间)
- 如何在Linux系统中新增用户组及其成员(linux用户组添加用户)
- 系统指令Linux用户如何使用系统指令(linux用户执行)
- Linux系统下如何更改用户ID(linux更改用户id)
- Linux系统中如何删除用户(linux系统删除用户)
- Linux分支:探索多样丰富的系统架构(linux的分支)
- Linux系统中如何删除用户账户?(linux删除账户)
- 如何在Linux系统中更改登录用户?(linux更改登录用户)
- Linux系统如何修改用户密码(linux修改用户的密码)
- 权限Linux系统下如何修改用户权限(linux修改用户)
- 在Linux系统上如何安装NS2网络仿真工具?(ns2安装linux)
- 如何在Linux系统中配置互相信任的步骤?(linux互信配置)
- 如何在Linux系统中查看CPU信息?(linux查cpu信息)
- Linux系统下如何编译C语言程序?(linux下c语言编译)
- 如何在 Linux 上创建系统用户(linux 创建系统用户)
- 用户如何安全退出Redis系统(用户退出redis)
- 如何在MySQL中创建系统用户(mysql中创建系统用户)
- Windows7系统下如何开启Redis服务(win7 开启redis)
- 调整调整Redis连接数,提升系统性能(redis连接数大小如何)