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中间件实现令牌的持久化操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。