• Web2.0用户注册,激活,密码找回模块


    在web2.0中,都采用Email作为登陆ID,账号模块主要由以下功能组成
    • 登陆验证(在激活前提下,才可登陆)
    • 用户注册
    • 账号激活
    • 重发激活邮件
    • 密码找回

    为实验这模块,我们可以提出这样的解决方案:
    A.数据库设计

    表Tao_Users存放用户信息,
        主要字段:
            UserID            用户唯一标识
            Email               用户Email 
            NickName      用户昵称
            Password        用户密码
            State               状态(0为未激活,1为已激活)
            RegTime          注册时间(可以用来删除数据库中长时间未激活的账号)
           
    表Tao_Valid存放验证信息
            主要字段:
            GUID                全局唯一标识符
            Type                  验证类型(1为账号激活时用,2为密码找回时用)
            UserID               用户唯一标识
            AddTime            添加时间(可以定期删除长时间未用数据)

    B.个功能实现(这里主要写有关存储过程)
        用户注册的存储过程:

    --用户注册
       CREATE PROCEDURE Tao_UserReg
    (
        
    @Email NVarChar(100),
        
    @Password NVarChar(50),
        
    @NickName NVarChar(50),
        
    @GUID NVarChar(50)=null OutPut  --返回激活码,发往用户邮箱
    )
    AS
    if not exists(select * from Tao_Users where Email=@Email or NickName=@NickName)
    begin
        
    Insert Into Tao_Users(Email,NickName,Password,RegTime)
        
    Values(@Email@NickName@Password,GetDate())
        
        
    Select @GUID = NewID();--由SQL生存一个GUID
            --插入验证信息表
        Insert Into Tao_Valid (GUID, UserID,Type,AddTime)
        
    Values (@GUID@@Identity,1,GetDate())
    end
    GO

    数据库返回一个GUID后,我们再往用户邮箱中发送验证Email,用户收到激活邮件后,进行账号激活

    --激活账号,返回用户信息(自动登陆系统)
    CREATE PROCEDURE Tao_UserActive
    (
        
    @GUID NVarChar(50)
    )
    AS
    declare @UserID int   --存放用户ID
    Select @UserID=UserID From Tao_Valid Where GUID=@GUID And Type=1
        --删除验证表中记录
    Delete From Tao_Valid Where GUID=@GUID And Type=1
        --更新用户状态
    Update Tao_Users Set State=1 Where UserID= @UserID
        --返回用户信息,自动登陆
    Select * From Tao_Users Where UserID= @UserID And State=1
    GO

    --重发激活码
    CREATE PROCEDURE Tao_UserAgainActive
    (
        
    @Email NVarChar(100),
        
    @GUID  NVarChar(50) Output
    )
    AS
    declare @UserID int
    --从用户表中根据Email,查出UserID
    Select @UserID=UserID 
        
    From Tao_Users 
        
    Where State=0 And Email=@Email
    --如果找到有此未激活用户
    if NOT(@UserID=NULL)
    Begin
        
    --删除原有激活信息
        Delete From Tao_Valid Where UserID=@UserID
        
    Select @GUID=NewID() --重新生存ID
        Insert Into Tao_Valid 
               (GUID,UserID,Type,AddTime) 
        
    Values (@GUID,@UserID,1,GetDate())
    End
    找回密码部分(返回GUID后,发往用户邮箱)
    --发送找回密码验证码
    Create Procedure Tao_UserCPwdCode
    (
       
    @Email  NVarChar(100),
       
    @GUID   NVarChar(50)OutPut
    )
    AS
       
    Declare @UserID int
       
    --从用户表中查出UserID
       Select @UserID=UserID
           
    From Tao_Users
           
    Where State=1 And Email=@Email
       
    --如果此用户
       If Not(@UserID=Null)
       
    Begin
            
    --删除原有更改密码验证码
            Delete From Tao_Valid Where UserID=@UserID And Type=2
            
    Select @GUID=NewID()
        
    --插入新验证码
            Insert Into Tao_Valid
                   (GUID,UserID,Type,AddTime)
            
    Values(@GUID,@UserID,2,GetDate())
       
    End



    密码重设部分,根据用户邮箱中的更改密码链接GUID,获取用户昵称,进入更改密码页面,

    --密码找回
    CREATE PROCEDURE Tao_UserCPwd 
    (
        
    @GUID NVarChar(50)=null,
        
    @NewPwd NVarChar(50)=null
    )
    AS
    if(@NewPwd=null)
    --返回用户昵称,UI中进入重设密码页面
    begin
        
    Select U.NickName From Tao_Users AS U,Tao_Valid AS V
        
    Where V.UserID=U.UserID AND V.GUID=@GUID
    end
    --更改用户密码
    Else Begin
        
    declare @UserID int
        
    Select @UserID=UserID From Tao_Valid Where GUID=@GUID And Type=2
        
    Delete From Tao_Valid WHere GUID=@GUID And Type=1
        
    Update Tao_Users Set State=1,Password=@NewPwd Where UserID= @UserID
        
    Select * From Tao_Users Where UserID= @UserID
    End
    GO

    这样就完成了整个账户管理部分模块.

  • 相关阅读:
    TOPCoder(一)Time
    highchart柱状图 series中data的数据构造
    (转)myeclipse工程 junit不能运行 ClassNotFoundException
    reserve和resize区别
    ++ fatal error C1083: 无法打开预编译头文件:“.Debug outer.pch”
    初学lua --lua嵌入c++的一个问题(初始化lua出错,版本问题)
    .NET中字符串split的C++实现
    成员函数指针与高效C++委托 (delegate)
    Android.mk 用法介绍
    cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
  • 原文地址:https://www.cnblogs.com/CSharp/p/310362.html
Copyright © 2020-2023  润新知