用户模块功能与流程
表结构
users表:用于保存用户信息。
| id | int(11) | PrimaryKey |
| username | varchar(32) | 用户名 |
| password | char(50) | 密码 |
| name | varchar(50) | 名字 |
| 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) |
功能与流程
一、 用户注册
- 显示用户注册界面。
- 用户填写注册信息,并提交。
- 系统通过Javascript对注册信息进行验证。包括:
- 非空验证。像用户名、密码、email等信息不能为空。
- 长度验证。验证数据长度是否过短或过长。
- 两次输入的密码是否相同。
- email地址的格式是否合法。
- 通过Ajax验证用户名是否存在。(可选,也可以提交到后台验证)
- 通过Ajax验证email地址是否已经被使用。(可选,可以提交到后台验证)
- 数据如果未通过验证,显示错误信息,并重复步骤2、3。
- 如果前台数据验证通过,则将数据提交到后台,进行后台数据验证。后台数据验证的方面和前台相同。
- 如果数据未通过后台验证,则返回用户注册页面,并显示所有的错误信息,让用户对信息进行修改。重复步骤2、3、4、5。
- 如果数据通过了后台验证,就将用户注册的信息保存到users表中,但是不要给这个用户添加任何角色。在添加纪录前,要将密码加密后再保存到数据库中。
- 用户保存完毕后,生成一个10位的随即字符串,把字符串和用户的id组合到一个url中,如http://xxx.com/user/15/verify/ad89d09uu2。把这个url发送给用户注册时使用的email地址,告知用户通过点击这个链接,就可以完成注册的认证。
- 发出email后,将user id和生成的这个随即字符串(token)保存到user_pendings表中。
- 显示注册成功页面。
二、验证用户email地址
- 用户点击收到的验证邮件中的验证链接。
- 根据url中用户的id,到user_pendings表中查找是否存在这个验证信息。如果不存在,显示验证失败页面。
- 如果验证信息存在,对比url中的token和这个用户在user_pendings表中的token是否相同。如果不相同,显示验证失败页面。
- 如果token也相同,则查看token生成的日期是否已经超过了系统规定的token失效时间,比如24小时。如果token失效,则显示验证失败页面。
- 如果token未过期,则将’login’角色赋给当前用户,使用户可以具有登录的权限。
- 将user_pendings中此用户的验证信息删除。
- 显示验证成功页面(或登录页面)。
三、用户登录
- 显示用户登录页面。
- 用户输入用户名和密码,点击“登录”按钮进行登录。
- 通过Javascript进行前台数据验证。包括:
- 用户名和密码不能为空。
- 用户名和密码的长度不能过长或过短。
- 如果前台验证失败,则显示所有错误信息,回到步骤2。
- 如果前台验证通过,则进入后台验证。系统通过用户输入的用户名,在users表中查找这个用户是否存在。如果不存在,则显示登录失败页面,让用户重新登录。
- 如果用户存在,则对比用户输入的密码是否正确。如果密码错误,显示登录失败页面,让用户重新登录。
- 如果密码正确,则察看此用户是否具有’login’角色。如果没有,则提示用户没有登录的权限。
- 如果用户有’login’的角色,则将用户信息保存到session中,并显示登录成功页面。