登录及Token校验
登录及Token校验
登录系统工作流程梳理
- 进入页面,默认重定向到应用页面,但在路由跳转前,先判断浏览器中是否存储 token,若没有 token 且跳转的页面不是登陆页面,则中断本次跳转并强制跳转到登陆页面。
- 输入用户名与密码,发送至后端校验,若校验成功,后端生成 token 并返回,前端将其存储至 localStorage 和 vuex
- 同理,在应用页面路由跳转时,每次跳转始终向后端发送校验请求,一旦失败,表明 token 已过期,自动跳转至登陆页面,重新登陆。
后端逻辑 (egg)
1 |
|
重点:jwt
的使用:
- 安装:
npm install --save jsonwebtoken
- token 生成:
jwt.sign(payload,secret,options)
- token 校验:
jwt.verify(token, secret, [(err,decoded)=>{...}])
jwt.sign()
参数解析:
- payload:负载。(Object) ,由用户自定义。作用:校验成功时所传递的参数
- secret: 密钥。(String),由用户自定义。作用:生成 token 的一个环节
- options: 配置。(Object),jwt 提供。作用:token 配置项、
- 返回值:token: String
jwt.verify()
参数解析:
- token:token 值。(String) ,jwt 生成的 token。
- secret: 密钥。(String),该 token 所对应的密钥。
- function(err,decoded) {…}:回调函数,可对结果做进一步处理,若返回err,则…;若返回decoded,则…;可选参数,若不指定,则校验成功返回 decoded,失败返回 err,可由 try … catch … 捕获。
- 返回值 decoded: Object || err: Object
前端逻辑
1 |
|
全局路由守卫
每次跳转前都判断 token 是否有效。
注意: 这里判断条件为 !token && to.name !== 'login'
, 若只判断 token 是否存在,执行 'next(/login)
强制跳转时,又会触发 router.beforeEach
,导致死循环
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!