规范
用户登入网站将得到一个cookies,如果用户有2个account,各别登入admin page 和 client page,是会得到2个cookies。
在reload page时,后台会得到2个cookies,(*asp.net 原装只能有一个cookies的管理,这里没有使用asp.net的工具,自己做迟早会遇到漏掉的问题)
如果有cookies就必须要有header 表明 selectedAccountTypeName 和 selectedAccountRole, 如果没有cookies就没有header
经过验证后直接给前台进行处理,如果发现有2个cookies将提问要使用那个account。
在每一次的ajax 请求,sessionTimeOut会重新更新,如果admin 的sessionTimeOut是5分钟,client的sessionTimeOut是3个月,这里会各别更新。
设计要求:顾客要设计和arvixe 一样,这时造三暮四,希望他可以理解这是没差,但如果顾客硬要这样,就只好高价处理问题,换个概念。之后的所有项目将follow 这个概念。
安全问题:cookies 除了可以写domain 和path的设置之外,还可以httpOnly = true,javascript 是不能访问cookies的设置,游览器和后台可以访问。
登出时,会让用户选择哪个account登出,同时会请求后台要登出clear cookies(前台javascript是不能对cookies进行操作的)。如果登出时,本地已经cookies 已经expired了,就直接去login界面
注册过程
用户注册会制作一个请求,内容有primaryKey,accountTypeName,password。后台会通过primaryKey 和 accountTypeName去sql 找有没有这个account,没有找到就代表可以注册,
接着会protect hacker,确定前台给的accountTypeName是对的(因为admin是不可以register的),
接着确定accountTypeName后需要给set roles(一个account可以拥有多个角色,一个角色可以拥有多有权限),
接着给密码加密,
接着创建token,
接着进Sql,
在发email 或 手机让用户收到token 来网页verifyContact
verifyContact过程
用户会收到email或信息,内容是可以直接访问网页,会附带token,primaryKey和accountTypeName,这时后台会收到便开始去sql 找资料,为了提防hacking,每一次token不一样将更新sql 的token no match count++,如果是资料中no match count是大过100,后台会throw一个error singal(resend verify code)
前台会有一个resend verify code 的button,用户点击将会收到一个email或信息,不管发多少次token将会是一样的,但是token no match count 大过100就会把token给更新。
如果没被hack,token将成功match,sql 会更新(把token remove),reponse 给前台account 对象同时cookies 也给了。
这时会把account对象给push去accountArray里,digest后页面会更新。(HdLogin是后台通过cookies找到资源,再给进HdLogin的)
forgotPassword过程
用户会提交primaryKey,accountTypeName给后台,找到sql资料后发email或信息,不管发多少次token将会是一样的,但是token no match count 大过100或者是空就会把token给更新或添加。
resetPassword过程
收到email或信息后,来到这页将需要输入password和confirm password,前台会提交primary,accountTypeName,password和token,这时后台会收到便开始去sql 找资料,为了提防hacking,每一次token不一样将更新sql 的token no match count++,如果是资料中no match count是大过100,后台会throw一个error singal(go forgot password)
login过程
前台需要提交primaryKey,accountTypeName,password去后台,后台去sql找,如果有account 但password 不对,将更新no match count++,如果是资料中no match count是大过100,后台会throw一个error singal(go forgot password)
account disable
verifyContact,forgotPassword,resetPassword和resetPassword 过程中sql将得到account对象,如果发现account的status是disabled,将throw一个error singal给前台。
如果没有disabled,就会看每一个角色,如果角色是diasble,后台会拿掉这角色。