在开发网站时,我们需要对用户注册的邮箱进行核对与验证,用户填写的邮箱是否有效邮箱。

好吧,我们先从数据库入手,修改用户表让用户有填写email的字段,添加了2个字段:

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

Source Code

由于你需要做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'用户修改密码')

Source Code

接下来,你还需要创建另外一张表,是记用户请求的事件,记录用户的一些信息,如帐号,邮箱,链接有时效性等:

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 DELETEDIF @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)
BEGINRAISERROR(N'帐号错误或不存存在,请联系系统管理员。',16,1)RETURN
ENDDECLARE @Email NVARCHAR(100)
SELECT @Email = [Email] FROM [dbo].[Users] WHERE [U_nbr] = @U_nbrIF 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
ELSEINSERT 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)
BEGINDECLARE @Account NVARCHAR(30)SELECT @Account = [Account] FROM [dbo].[UserRequestAction] WHERE [Token] = @tokenUPDATE [dbo].[Users] SET [IsVerify] = 1 WHERE [U_nbr] = @AccountUPDATE [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)
BEGINDECLARE @Account NVARCHAR(30)SELECT @Account = [Account] FROM [dbo].[UserRequestAction] WHERE [Token] = @tokenDECLARE @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
BEGINRAISERROR(N'无法更改密码,请联系客服或网络管理员。',16,1)RETURN
END

Source Code

数据库方面开发就这样子,程序方面看你自己发挥了。

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

  1. sql判断邮箱是否合法_如何验证会员系统中用户的邮箱是否真实存在

    在开发网站时,我们需要对用户注册的邮箱进行核对与验证,用户填写的邮箱是否有效邮箱. 好吧,我们先从数据库入手,修改用户表让用户有填写email的字段,添加了2个字段: ALTER TABLE [dbo ...

  2. linux系统中如何验证网络端口通不通

    linux系统中如何验证网络端口通不通 前言 相关命令详解 telnet命令 具体的用法 端口不通的时候: 端口开启的时候: telnet 测试端口连通之后,还有惊喜 如何退出 telnet命令 第一 ...

  3. suse LINUX系统中的,用户权限的问题。

    关于suse LINUX系统中的,用户权限的问题. 当我们大家用LL或LA命令来查看一下当前目录的相关信息时, 在最前面我们总能看到这样的信息提示: -drrr--o--- 这些就是相关的用户服务对本 ...

  4. 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

    文章目录 一.Android 逆向中使用的 android.permission 权限 二.Android 系统中的 Linux 用户权限 一.Android 逆向中使用的 android.permi ...

  5. chmod 是一条在Unix系统中用于控制用户对文件的权限的命令

    chmod 是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...

  6. Linux系统中的超级用户,普通用户,特殊用户(特殊用户)3种类型

    •超级用户: 在默认安装的初始情况下,Linux系统中的超级用户为root,也称其为根用户,具有系统中最高的权限.超级用户可以对Linux 系统做任何操作,比如终止进程.添加或删除硬件设备.超越任何用 ...

  7. 分时系统中,当用户数目为100时,为保证响应时间不超过2s,此时的时间片最大应该为

    分时系统中,当用户数目为100时,为保证响应时间不超过2s,此时的时间片最大应该为? 解: 公式为:响应时间/用户数 其他类似. 因此答案为:2/100=20ms

  8. (Linux)在Ubuntu系统中添加新用户并授予root权限

    向Ubuntu系统中添加新用户并为其授予root权限的步骤如下: 打开终端Terminal 输入命令: sudo su - 以 root 身份登录. 注: sudo su : 切换root身份, 不携 ...

  9. linux查找用户前三进程_查看 Linux 系统中进程和用户的内存使用情况 | Linux 中国...

    有一些命令可以用来检查 Linux 系统中的内存使用情况,下面是一些更好的命令.-- Sandra Henry-stocker 有许多工具可以查看 Linux 系统中的内存使用情况.一些命令被广泛使用 ...

最新文章

  1. 开启报名 | 清华游凯超:预训练模型这么多,该如何选择?一种提速3000倍的高效方法...
  2. 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)
  3. Linux下安装PHP7.1并做关联APACHE处理
  4. 学生电脑哪个牌子好_专卖工作服哪个牌子好
  5. Python入门教程之文件读写操作知识
  6. 苹果AirPods 2新爆料:无线充电盒重量增加 支持快速充电
  7. 数据结构笔记(一) 线性表(C语言描述)
  8. 破产的圣文森特医院,如何利用大数据寻求解救方案?
  9. ntp和ptp实现_NTP/PTP时间同步入门
  10. 超逼真AI设计师,谷歌大脑推出新的文本生成图像模型Imagen
  11. 三边测距定位算法详解
  12. 体表面积在线计算机,体表面积计算器
  13. mysql数据库证件脱敏_mysql对身份证号码进行脱敏处理
  14. python导出pdf_python生成pdf
  15. JUCE学习笔记08-合成器(一)振荡器与包络发生器
  16. WebStorm之如何清除缓存
  17. pr新建字幕样式(模板)
  18. 资产设备使用时,GPS干扰的问题该怎么解决?
  19. Python3.7入门什么Bug?Bug最基本的调试Debug
  20. Android显示图片崩溃的解决办法

热门文章

  1. Android5.0新特性:主题样式
  2. python数组去重函数_Python常用功能函数系列总结(一)
  3. php mysql不大小写吗,PHP+MYSQL大小写有关问题
  4. Linux脚本实战之检测网卡流量
  5. Netty详解(二)Linux 网络IO模型
  6. 解决ajax劫持,Ajax实现检测网站劫持的方法
  7. python实战项目_11 个实战项目,掌握 Python 数据可视化
  8. 5位无符号阵列乘法器设计_可变位宽的大规模矩阵乘法方法
  9. WIN下Nginx缓存加速配置方法
  10. 笔记--待解决,整理