Nuxt Auth + Express:获取登录用户?

问题描述 投票:0回答:2

我在学习如何使用 Nuxt-Auth 时跌跌撞撞,我目前有一个与 JWT 合作的本地策略。我现在希望在调用数据库之前获取当前用户(通过 express 在服务器上)。

我的第一个想法是解析请求头中的JWT并抓取存储的用户id。但是,看到我正在使用 nuxt-auth 中间件,也许有一个内置的方法可用? nuxt-auth 的文档特别简单。

简而言之,我知道如何使用nuxt-auth在客户端获取当前用户。有服务器端方法吗?向我指出任何文档都会非常有帮助。谢谢!

express nuxt.js
2个回答
0
投票

搜索 nuxt-auth 解决方案没有得到任何结果,所以我选择编写一个简单的 express 中间件来解码 JWT 并将有效负载(包含用户信息)包含在 req 对象中。

编辑:根据@kamal的要求:

const jsonwebtoken = require('jsonwebtoken')
const tokenSecret = 'whateversecrethere'
const accessTokenExpiry = 15 * 1000 // 15 seconds

// @param user {object} - contains user information. eg: { id, name, email }
// returns {object} - access token and refresh token

_createJWTs(user) {
    try {

      let refreshTokenID = Math.floor(Math.random() * (1000000000000000 - 1 + 1)) + 1
      let refresh = { userID: user.id, tokenID: refreshTokenID }
      let accessToken = jsonwebtoken.sign(user, tokenSecret, { expiresIn: accessTokenExpiry })
      let refreshToken = jsonwebtoken.sign(refresh, tokenSecret)

      return { accessToken, refreshToken }
    } catch (err) {
      console.log(err)
    }
  }

0
投票

所以如果我做对了,你有一个 express 服务器端点,你正在尝试使用 nuxt-auth 进行身份验证。

因此,对于 LocalStrategy,Nuxt-Auth 似乎将一堆会话令牌存储为 cookie。我相信这就是我们用来验证常规 Nuxt API 端点的方法。

现在,这就是我如何解决我认为您正在尝试做的事情(同时尝试为文件上传模块 Uppy Companion 找出相同的解决方案):

import { getServerSession } from '#auth'

const authentication = async (req, res, next) => {
   userAuth = await getServerSession({ 
     context: {}, node: { req, res }
   });

   if (userAuth && userAuth.user && userAuth.account) { 
     next()
   } else { 
     res.json({ success: false, message: "Unauthorized upload" })
   }
}

const { app: companionApp } = companion.app(uppyOptions)

app.use(authentication, companionApp);

在这里,我将请求“转换”为事件对象并将其传递给 getServerSession 函数。这会产生用户会话对象。

© www.soinside.com 2019 - 2024. All rights reserved.