nuxt 自定义 auth 中间件实现令牌的持久化操作
核心点就是在process.server下,把之前存在cookie中的数据再用store.commit一下
auth.js
/*eslint-disableno-unused-vars*/ /*eslint-disableno-useless-return*/ exportconstTokenKey='Admin-token' /** *解析服务端拿到的cookie *@param{*}cookie *@param{*}key */ exportfunctiongetCookie(cookie,key){ if(!cookie)return constarrstr=cookie.split(';') for(leti=0;i{ const{path,fullPath,query}=route const{redirect:redirectPath}=query //应对刷新vuex状态丢失的解决方案 if(process.server){ constcookie=req.headers.cookie consttoken=getCookie(cookie,TokenKey) //设置登录状态 if(token){ store.commit('LOGIN',token)//'LOGIN'和store中的mutations对应起来就可以了 } if(token){ //已经登录,进来的是登录页,且有重定向的路径,直接调跳到重定向的路径 if(path===loginPath&&path!==redirectPath){ redirect(redirectPath) }elseif(path==='/'){ redirect(indexPath) }else{ //其他的已经登录过得直接跳过 return } }else{ //鉴权白名单 if(whiteList.includes(path))return //未登录,进来的不是是登录页,全部重定向到登录页 if(!path.includes(loginPath)){ redirect(`${loginPath}?redirect=${encodeURIComponent(fullPath)}`) } } } }
补充知识:NUXT中间件Middleware
中间件可以使您的自定义的函数在渲染页面之前运行
所有的中间件都必须放置在middleware/目录下。文件名将作为中间件的名称(如:middleware/auth将成为中间件auth)。
中间件收到上下文作为第一个参数:
exportdefaultfunction(context){ context.userAgent=context.isServer?context.req.headers['user-agent']:navigator.userAgent }
中间件将按照此顺序在序列中执行:
1、nuxt.config.js
2、匹配的布局
3、匹配的页面
中间件可以是异步的,仅返回一个Promise或者使用第二个callback返回值:
middleware/stats.js
importaxiosfrom'axios' exportdefaultfunction({route}){ returnaxios.post('http://my-stats-api.com',{ url:route.fullPath }) }
然后,在nuxt.config.js,布局或者页面中,配置middleware参数
nuxt.config.js
module.exports={ router:{ middleware:'stats' } }
中间件stats将在每次路由改变时被调用。
想了解中间件的例子,请移步example-auth0
以上这篇nuxt自定义auth中间件实现令牌的持久化操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。