会员系统中必要表明客商的邮箱是或不是真正存

2019-09-20 06:12 来源:未知

 
接下去的流水线是,客商会张开他的邮箱,查阅刚刚系统一发布送的邮件。邮件内容就是看其实须求了,如提示顾客,是或不是上下一心本身操作,安全性等,那个都不是什么首要,首要的是那一条链接。
指令顾客点击链接。那些链接会导上到网址二个页面。当到这几个页面时,系统会在那页面举行局地程序处理,检查链接有效性,时间是不是过期,即便全勤尚未难题,会进更新IsVerify字段为ture.

彩民之家高手论坛 1

鉴于您须要做2个作用,贰个是须求顾客验证邮箱有效性,也会有能够以邮箱来让顾客修改顾客密码。因而需求制造三个表来存款和储蓄那2个门类的多寡:
彩民之家高手论坛 2

未来能够转到MVC应用程序,张开Entities目录下的MemberEntity.cs,加多多个办法:
彩民之家高手论坛 3

Source Code

末段再创造一张表,是用来存款和储蓄全部订阅等待的就要发送邮箱地址。
彩民之家高手论坛 4

好呢,大家先从数据库动手,修改客户表让顾客有填写email的字段,增加了2个字段:
彩民之家高手论坛 5

 成立RequestPassword视图,参谋下图的目录与路子:
彩民之家高手论坛 6

彩民之家高手论坛 7彩民之家高手论坛 8

 

 

三个专门的职业的站点,恐怕不只有应用三个信箱来发送服务邮件,电子报,会员服务等,应该把主发送的邮件列于此。

彩民之家高手论坛 9彩民之家高手论坛 10

 数据库的统一希图还平素不到位,还应该有多少个存款和储蓄进度要写:
彩民之家高手论坛 11

当顾客改造邮箱成功时,需求同进对[IsVerify] 更动为false。由此你需求对最开首的表写贰个触发器:
彩民之家高手论坛 12

去调整器展开MemberController.cs增加多少个Result:
彩民之家高手论坛 13

 

token字段,是独一字段,将用来发送给会员。Account和Email是用来记录会员央浼的帐号与邮箱。而最后叁个字段Expire是贰个记下过期的字段。到时前后相继会根据此字段的时刻来链接决断是不是失效。

彩民之家高手论坛 14

地点的会员央浼密码存款和储蓄进度,首先推断会员在央求密码时所输入的帐号与邮箱是还是不是科学。
随即发生二个斩新的token码。当然这一个token码,你也足以服从你的管理格局来发出,独一性就可以。
#36行代码,是采取在邮件参数中,使用哪一个参照,便是说选拔哪四个邮箱来发送。
#38与#39行代码的网站,是一个实打实精确的网站,肯定的你要求改造你MVC应用程序中的网址。
最终是把音讯插入至订阅邮件列表的表中。等待程序来管理。

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

千帆竞发吧,在数据库创建一张表[dbo].[ChangeRequestPassword],客商央求密码时,存款和储蓄会员每趟呼吁一时的token音讯:
彩民之家高手论坛 15

顾客验证邮箱有效性,是在签到之后举办的,由此只必要点击“验证”铵钮就可以,系统即发送验证的邮件至客商的邮箱中。
除此以外,当客商忘记密码时,是在并未有登陆类别之下进行的,因而供给输入客户的帐号能力张开下一步。
均是选用那几个蕴藏进度[dbo].[usp_UserRequestAction_Request]。

增多二个出殡和埋葬的信箱参数,Insus.NET使用微博的信箱:
彩民之家高手论坛 16

彩民之家高手论坛 17彩民之家高手论坛 18

接下去,创设多个存款和储蓄进程,增添邮件参数:
彩民之家高手论坛 19

彩民之家高手论坛 20彩民之家高手论坛 21

还差不离怎么呢?会员忘记密码时,能够呼吁密码或是重新载入参数自身的密码。现在Insus.NET就落到实处这么些作用。此次演示中,Insus.NET的达成思路是会员填写注册的音讯,如帐号和邮箱等,然后给邮箱发送贰个超链接,客户展开链接,现身复位密码的网页。此时会员就足以在24钟头有效的情形之下重新载入参数密码。

在支付网址时,大家须要对客商注册的邮箱进行核算与认证,客户填写的信箱是还是不是行得通邮箱。

 

Source Code

 

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

在此Insus.NET提议网上好友不要尝试采取方面包车型客车帐号与密码登入上边所列的信箱,密码肯定不是所展现的呐。

如就算客商忘记密码的话,在顾客点击链接,系统也会检有效性,未有期,面会出现转移密码的form,让用户展开更动全新的密码。

最后来探视实时操作演示:

 

在示范中早就达到规定的规范大家中期的主见,可是邮件照旧尚未发送出去,只是存在MailingList列表中。下一篇Insus.NET将会完毕MVC应用程序自动施行也发送邮件。

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

接下去,创立一张邮件参数表[dbo].[EmailParameter]:
彩民之家高手论坛 22

 

透过一密密麻麻的勤学苦练,完结了会员注册《MVC会员注册》,
登录《MVC应用程序实现会员登入作用》,
以及撤除《MVC会员注销作用Cookie的采纳》等功能。

Source Code

上面Insus.NET以今日头条邮箱为例,登陆之后,可以在选用中观望如下消息:
彩民之家高手论坛 23

Source Code

到此地,那有的算完结了,会员能够向来访谈此页或是我们得以在签到介面中,放二个链接,能够导向此页:
彩民之家高手论坛 24

Source Code

 代码:
彩民之家高手论坛 25

接下去,你还索要成立其余一张表,是记客商需要的事件,记录客商的有的新闻,如帐号,邮箱,链接有时效性等:

Source Code

 

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
ALTER TABLE [dbo].[Users]
ADD [Email] VARCHAR(100) NULL, 
[IsVerify] BIT NOT NULL DEFAULT(0)


 SELECT * FROM [dbo].[Users]
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

彩民之家高手论坛 26彩民之家高手论坛 27

 

 

 
当客商产生验证邮箱或是改变密码时,让程序实施下边包车型大巴存放进度:

另五个是ResetPassword的,重设密码:
彩民之家高手论坛 28

 数据库方面付出就那标准,程序方面看您本人表述了。

 

 

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

 

彩民之家高手论坛 29

彩民之家高手论坛 30彩民之家高手论坛 31

Source Code

Ok,还差2个存款和储蓄进程,第三个是翻新IsVerify字段值:
彩民之家高手论坛 32

彩民之家高手论坛 33彩民之家高手论坛 34

版权声明:本文由彩民之家高手论坛发布于彩民之家高手论坛,转载请注明出处:会员系统中必要表明客商的邮箱是或不是真正存