Vue.js 将客户端vuex状态同步到服务器端状态的最佳做法?

Vue.js 将客户端vuex状态同步到服务器端状态的最佳做法?,vue.js,vuejs2,vuex,server-side-rendering,Vue.js,Vuejs2,Vuex,Server Side Rendering,我克隆了一个Vue.js应用程序,带有SSR和vuex 这个应用程序,而我的api服务器在我的本地开发环境中监听3000。我正在尝试使用jwt在其中实现用户身份验证 当客户端从api服务器接收令牌时,客户端状态将使用令牌更新,但是如何使服务器端状态意识到用户已登录 通常,如何同步客户端和服务器端状态 我想到的一个丑陋的攻击是,当用户使用正确的凭据登录时,api服务器应该打开与8080服务器的套接字连接,并触发服务器端的状态更新?它是一个可接受/可扩展的解决方案吗? 这方面的最佳实践是什么 更多详

我克隆了一个Vue.js应用程序,带有SSR和vuex

这个应用程序,而我的api服务器在我的本地开发环境中监听3000。我正在尝试使用jwt在其中实现用户身份验证

当客户端从api服务器接收令牌时,客户端状态将使用令牌更新,但是如何使服务器端状态意识到用户已登录

通常,如何同步客户端和服务器端状态

我想到的一个丑陋的攻击是,当用户使用正确的凭据登录时,api服务器应该打开与8080服务器的套接字连接,并触发服务器端的状态更新?它是一个可接受/可扩展的解决方案吗? 这方面的最佳实践是什么

更多详细信息.. (a) 在路由器中,我实现了导航保护:

      ....
      if (router.app.$store.getters.isLoggedIn)  next()
      else  next('/login')
      ...
现在在登录页面中登录时,我向api服务器(不是端口8080上的vue服务器)发布一个操作,并将令牌存储在客户端状态。 但是当我重新加载登录仪表板页面时,它在服务器端状态下找不到令牌,上面的函数
isLoggedIn
返回false,并且它尝试呈现登录页面请参见上面的代码,因此客户端DOM与服务器呈现的页面不匹配,客户端尝试在客户端重新呈现DOM

嗯, 你写了你正在使用jwt

因此,服务器不需要知道用户是否已登录

只要客户机在每个请求(头、cookie、体)上提供这个jwt,服务器就可以授权这些请求

要正确处理,您可以使用以下软件包:

签发代币:

const token = JWT.sign({
    userId: user.id,
    moreData: undefined,
  },
   'somRandomLongPrivateKey123', // protect it, env var?
  {
    expiresIn: '2d',
  })
验证令牌的中间件:

module.exports = async (req, res, next) => {
try {
  const payload = JWT.verify(token, 'yourprivatekey') 
  req.user = User.find(payload.userId) 

  next()

} catch(e) {
  return res.status(401).send('no valid token')  
}

问题是:一般来说,如何同步客户端和服务器端状态?我应该在哪里在SSR服务器或后端服务器上验证和生成上述JWT?事实上,这个问题有点复杂。请尝试了解更多细节。无论如何,谢谢你的回答。不过我已经找到了解决办法。如果有人需要我的答案,并且面临着与我相同的奇怪问题,我可以写一个详细的答案:)@RameshPareek如果你有一个详细的答案,发布一个总是一个好主意-我想看看。@Brent,是的,我确实有,事实上我花了一个漫长的星期来实现这一点,在我的一生中我不能忘记那一周,但是我可以理解vue js如何工作的一些内部工程。人们说vuejs文档很好,但我认为文档中没有提到这一点。在服务器端渲染时,如何管理用户的登录状态。我很快就会在媒体上发表一篇关于这方面的好文章。
module.exports = async (req, res, next) => {
try {
  const payload = JWT.verify(token, 'yourprivatekey') 
  req.user = User.find(payload.userId) 

  next()

} catch(e) {
  return res.status(401).send('no valid token')  
}