本文信息创建于2018/03/222018/10/30文章更名为简单的用户登录和权限控制设计对于任何用户,第一次需要创建一个用户(admin)。前端界面显示控制用户管理模块根据本地凭证判断是否为管理员用户=>显示/不显示用户管理模块的导航栏。模块功能页面显示导航栏;welcome/login不显示导航栏动态控制导航栏的显示和隐藏前端本地控制(进入页面前)--路由守卫本地是否有凭证(包括token和用户信息)welcome/登录页面(是否属于登录状态)=>跳转到首页/Next向后台发送请求=>后台确认系统是否为首次使用(系统有/没有用户)=>欢迎/登录页面功能页面本地是否有凭证(是否属于登录状态)=>进入功能页面/跳转到loginAdmin页面查看本地是否有凭证(是否属于登录状态)已登录)=>下一步/跳转到登录本地凭据查看用户是否为管理员类型=>进入管理页面/跳转到404页面。前端向后端请求验证(进入页面后)——http拦截器请求发送处理每个heep请求token请求响应处理在请求头上返回本地凭证中的401状态码=>删除本地凭证(如果有的话),否则跳转到登录,no??对后端登录和鉴权登录逻辑做特殊处理。后端接收前端发送的用户信息,将前端发送的用户信息(密码需要在后端进行哈希处理)与数据库用户信息进行比对。如果匹配,下一步。如果不匹配,则返回错误/权限过期缓存中是否存在用户登录码(如果不存在,则生成一个随机码存入缓存)登录token,写入用户信息(id,type等),编码到token的payload中,并设置token的有效期,返回用户信息和token给前端用户身份,一般认证token解码失败:包括无token、token过期、tokenpayload不包含所需信息=>返回401token解码=>获取用户信息(包括id、code等)=>将code与缓存代码是否一致=>下一步/返回401根据从token中获取的用户信息判断用户是否为管理员=>认证成功/下一步非管理员检查用户是否被删除(仅删除用户改变数据库状态而不是删除数据库)=>返回401/认证成功创建用户认证创建系统第一个用户后端接收前端发送的创建用户信息=>请求头是否不带token或者是否创建的用户类型为管理员=>下一步/返回401判断是否是第一次使用系统=>创建用户/返回401创建的用户不是系统的第一个用户后台接收创建的用户信息前端发送=>请求头携带token=>判断token本身是否过期=>返回401/Nextdecodetoken=>解码后获取用户信息=>用户是否为管理员并与缓存的token进行比较=>next/return401createuser=>是否创建用户成功=>returnsuccess/next是否已经存在同名用户=>返回已存在同名用户的提示/return修改用户信息失败authentication用户身份generalauthentication如果用户被识别为管理员,则认证成功;否则,下一步验证要修改的用户信息是否为用户本人=>下一步/返回401验证旧密码是否正确=>验证成功/返回旧密码不正确删除用户验证用户身份普通验证验证用户为administrator=>认证成功/NextTips修改用户密码/删除用户成功后,删除对应用户的缓存登录码为什么不是cookie=>无状态,防xss攻击,多端分享api如何跨用户分享用户登录状态domains已经使用了jwt,为什么还需要loggedin-code=>tips1是设计包含第三方登录(OAuth协议)的登录模块的原因