【问题标题】:Where to store user session in Sapper app在 Sapper 应用程序中存储用户会话的位置
【发布时间】:2020-02-24 02:27:40
【问题描述】:

我已经开始将一个应用从 React 迁移到 Sapper。我是 SSR 架构的新手,想知道存储用户会话和数据的最佳方式是什么。

我将 Firebase 用于我的身份验证和数据库。使用客户端 Firebase API 获取会话密钥和其他用户数据后,我将如何存储数据?我看过一些制作 user.js 商店的教程,但在 Sapper 文档中我看到它建议使用 session store。那么哪个更好呢?从客户端到服务器端会话存储的流程是什么?

例如如果我要创建一个登录文件夹,在该文件夹下我有 svelte 组件和服务器端路由。会有一个帖子“端点”来设置 session.user 吗?

【问题讨论】:

    标签: javascript firebase server-side-rendering svelte sapper


    【解决方案1】:

    这有点棘手。我设法使用身份验证中间件使其与客户端和服务器一起工作

    https://github.com/itswadesh/sapper-ecommerce/blob/master/src/server.js

    【讨论】:

      【解决方案2】:

      到目前为止我发现的最好方法是使用 JWT:

      要么从第三方(Google、facebook、github)获取 JWT,要么自己签名。

      server.js

      express()
          .use(
              compression({
                  threshold: 0
              }),
              sirv('static', {
                  dev
              }),
              cookieParser(),
              bodyParser.json({strict: false}),
              bodyParser.urlencoded({ extended: false }),
              async (req, res, next) => {
                  const token = req.cookies['AUTH']
                  const profile = token && !dev ? await getBasicUserInfo(token) : false
      
                  return sapper.middleware({
                      session: () => {
                          return {
                              authenticated: !!profile,
                              profile
                          }
                      }
                  })(req, res, next)
              }
          )
      

      然后对于每个请求,只需将'credentials':'include 添加到您对服务器的请求中。

      您必须在每个请求上验证令牌,但这种方法使您的应用具有超强的可扩展性

      【讨论】:

        猜你喜欢
        • 2015-05-11
        • 2014-09-18
        • 2017-05-14
        • 1970-01-01
        • 2015-08-08
        • 2016-06-16
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        相关资源
        最近更新 更多