Express 我应该如何处理nuxt Cookie过期和工作流?

Express 我应该如何处理nuxt Cookie过期和工作流?,express,cookies,jwt,nuxt.js,server-side-rendering,Express,Cookies,Jwt,Nuxt.js,Server Side Rendering,我已经为一个使用Nuxt前端(通用模式)和Apollo端点作为后端的项目创建了一个身份验证工作流 这是我发现的几个例子的混合,并且,对于SSR,由于我没有完全预见到可能出现的错误,我想确保我如何继续没有危险信号 在后端,我使用express中间件对JWT auth令牌进行签名、检查并在授权头中返回它们。以下是中间件: 从“jsonwebtoken”导入jwt; 从“apollo server express”导入{AuthenticationError}; 导出常量getToken=payloa

我已经为一个使用Nuxt前端(通用模式)和Apollo端点作为后端的项目创建了一个身份验证工作流

这是我发现的几个例子的混合,并且,对于SSR,由于我没有完全预见到可能出现的错误,我想确保我如何继续没有危险信号

在后端,我使用express中间件对JWT auth令牌进行签名、检查并在授权头中返回它们。以下是中间件:

从“jsonwebtoken”导入jwt;
从“apollo server express”导入{AuthenticationError};
导出常量getToken=payload=>{
返回jwt.sign(有效负载,process.env.SEED,{expiresIn:process.env.EXPTOKEN});
}
export const checkToken=(请求、恢复、下一步)=>{
const rawToken=req.headers[“授权”]
if(rawToken){
试一试{
const token=rawToken.substring(7)
//验证令牌是否已验证
const{user,role}=jwt.verify(令牌,process.env.SEED);
const newToken=getToken({user,role});
req.user=用户;
req.role=角色;
res.header(“访问控制允许原点”、“*”);
res.header(“访问控制允许头”、“来源、X请求、内容类型、接受”);
res.set(“访问控制公开头”、“授权”);
res.set(“授权”,纽顿);
}捕获(错误){
if(error.name==“TokenExpiredError”){
res.set(“访问控制公开头”、“授权”);
res.set(“授权”,假);
}
日志(“无效令牌”,错误);
返回新的AuthenticationError
//无效令牌
}
}
next();
}
因为有一个,所以我使用它的方法将JWT字符串存储在cookie中。据我所知,SSR应用程序没有与客户端匹配的服务器端本地存储,因此它们必须使用cookie。对吗

这是我的nuxt中间件,在允许用户访问身份验证路由之前,我在其中检查用户凭据。是相当混乱,但它得到了工作完成,除了评论的部分

导出默认函数({app,route,error,redirect}){
const hasToken=!!app.$apolloHelpers.getToken()
//这部分不起作用
/*const tokenExpireDateTime=app.$cookies.nodeCookie.parse('cookie-name','expires')
if(hasToken&&tokenExpireDateTime<0){
错误({状态代码:403,消息:“权限被拒绝”,描述:“对不起,您被禁止访问此页面”。})
应用程序$apolloHelpers.onLogout()
返回重定向(“/login”)
}
*/
如果(!hasToken){
如果(route.name===‘欢迎键’){
//注册链接路由
}否则{
如果(route.name==='home'){
错误({errorCode:403,消息:'不允许您查看此'})
返回重定向(“/showcase”)
}
如果(![‘登录’、‘忘记密码’、‘重置密码键’)。包括(路由名称)){
错误({errorCode:403,消息:'不允许您查看此'})
返回重定向(“/login”)
}
}
}否则{
如果(['login'、'forget_password'、'reset_password-key'])包括(route.name)){
重定向(“/”)
}
}
}
我有一个问题和几个困惑点

我的问题是,如果由于JWT已过期而需要再次登录,我无法在上述nuxt middlware中获取要重定向的cookie
expires
值。我使用了上面提到的代码作为参考

对于这个问题,我的困惑在于:

  • cookie上的过期日期是由Nuxt Apollo模块设置的,我希望,我必须使其与服务器上设置的持续时间相匹配(即上述服务器中间件中的
    process.env.EXPTOKEN
    ),对吗

  • 单是过期时间就很容易解决,而真正的安全性是当我的服务器中间件处理请求时,头中缺少有效的令牌。它用于客户端检测和重定向过期令牌/cookie,以及在SSR期间服务器端预取用户相关数据。对吧?

  • 我的前端没有考虑由我的express后端中间件发出的新令牌:它没有更新存储在JWT中的cookie,并且
    过期
    值客户端。我的意思是,我可以在响应中看到自动化头JWT字符串正在更新,但cookie没有更新。以下请求仍然使用第一个JWT字符串。我应该在每次往返时更新它吗?使用express中间件的方法,我遗漏了什么(您可以猜到,我没有写)

请帮助我更好地理解此工作流程以及如何改进它。它试图尽可能避免把这个问题说得太宽泛,但如果我能把它说得更窄一些,请随意建议编辑