用户模块功能与流程

表结构

users表:用于保存用户信息。

id int(11) PrimaryKey
username varchar(32) 用户名
password char(50) 密码
name varchar(50) 名字
email varchar(127) 邮件地址
logins int(10) 登录次数
last_login timestamp 最后登录时间

user_pendings表:用户email地址验证信息。

id int(10) PrimaryKey
user_id int(10) 用户id
token char(10) 用于验证的随即字符串
created_date timestamp 创建时间

roles表:角色表。在角色表中可预先插入系统中预置的角色,如’login’角色,拥有此角色的用户可以登录到系统中。

id int(11) PrimaryKey
name varchar(30) 角色名称
description varchar(100) 描述

roles_users表:users表和roles表的多对多对应表。

role_id int(11)
user_id int(11)

功能与流程

一、 用户注册

  1. 显示用户注册界面。
  2. 用户填写注册信息,并提交。
  3. 系统通过Javascript对注册信息进行验证。包括:
    • 非空验证。像用户名、密码、email等信息不能为空。
    • 长度验证。验证数据长度是否过短或过长。
    • 两次输入的密码是否相同。
    • email地址的格式是否合法。
    • 通过Ajax验证用户名是否存在。(可选,也可以提交到后台验证)
    • 通过Ajax验证email地址是否已经被使用。(可选,可以提交到后台验证)
  4. 数据如果未通过验证,显示错误信息,并重复步骤2、3。
  5. 如果前台数据验证通过,则将数据提交到后台,进行后台数据验证。后台数据验证的方面和前台相同。
  6. 如果数据未通过后台验证,则返回用户注册页面,并显示所有的错误信息,让用户对信息进行修改。重复步骤2、3、4、5。
  7. 如果数据通过了后台验证,就将用户注册的信息保存到users表中,但是不要给这个用户添加任何角色。在添加纪录前,要将密码加密后再保存到数据库中。
  8. 用户保存完毕后,生成一个10位的随即字符串,把字符串和用户的id组合到一个url中,如http://xxx.com/user/15/verify/ad89d09uu2。把这个url发送给用户注册时使用的email地址,告知用户通过点击这个链接,就可以完成注册的认证。
  9. 发出email后,将user id和生成的这个随即字符串(token)保存到user_pendings表中。
  10. 显示注册成功页面。

二、验证用户email地址

  1. 用户点击收到的验证邮件中的验证链接。
  2. 根据url中用户的id,到user_pendings表中查找是否存在这个验证信息。如果不存在,显示验证失败页面。
  3. 如果验证信息存在,对比url中的token和这个用户在user_pendings表中的token是否相同。如果不相同,显示验证失败页面。
  4. 如果token也相同,则查看token生成的日期是否已经超过了系统规定的token失效时间,比如24小时。如果token失效,则显示验证失败页面。
  5. 如果token未过期,则将’login’角色赋给当前用户,使用户可以具有登录的权限。
  6. 将user_pendings中此用户的验证信息删除。
  7. 显示验证成功页面(或登录页面)。

三、用户登录

  1. 显示用户登录页面。
  2. 用户输入用户名和密码,点击“登录”按钮进行登录。
  3. 通过Javascript进行前台数据验证。包括:
    • 用户名和密码不能为空。
    • 用户名和密码的长度不能过长或过短。
  4. 如果前台验证失败,则显示所有错误信息,回到步骤2。
  5. 如果前台验证通过,则进入后台验证。系统通过用户输入的用户名,在users表中查找这个用户是否存在。如果不存在,则显示登录失败页面,让用户重新登录。
  6. 如果用户存在,则对比用户输入的密码是否正确。如果密码错误,显示登录失败页面,让用户重新登录。
  7. 如果密码正确,则察看此用户是否具有’login’角色。如果没有,则提示用户没有登录的权限。
  8. 如果用户有’login’的角色,则将用户信息保存到session中,并显示登录成功页面。

Leave a Reply