2

我在我的应用程序中实现 Nuxt Auth(本地/刷新)的一半。我在数据库中有一个存储刷新令牌的表,我想在 Nuxt Auth 注销时从数据库中删除刷新令牌。Nuxt Auth 没有将刷新令牌发送到我的端点,因此我无法查找它并将其从数据库中删除。

Nuxt Auth 在登录时正确获取令牌和用户详细信息,并正确调用我的注销 API 端点,它只是发送一个空正文。

包.json:

"@nuxtjs/auth-next": "^5.0.0-1624817847.21691f1",

nuxt.config:

auth: {
  strategies: {
    local: {
      scheme: 'refresh',
      token: {
        property: 'accessToken',
        maxAge: 1800,
        global: true,
      },
      refreshToken: {
        property: 'refreshToken',
        data: 'refreshToken',
        maxAge: 60 * 60 * 24 * 30
      },
      endpoints: {
        login: {url: '/login', method: 'post'},
        refresh: { url: '/token', method: 'post'},
        logout: {url: '/logout', method: 'delete'},
        user: {url: '/user', method: 'get'}
      },
      user: {
        property: false,
      },
      tokenRequired: true,
      tokenType: 'bearer'
    }
  }
}

API端点:

router.delete('/logout', async (req, res) => {
  const sql =`DELETE FROM tokens WHERE id = '${req.body.refreshToken}'`
  await pool.query(sql)
  res.sendStatus(204)
})
4

2 回答 2

0

你绝对应该通过 HTTP 发送 SQL。
要么在某个路径上向您的后端发送一些 ID,/expire要么让令牌自行过期。

我的公司正在使用 5 分钟的令牌到期时间。这意味着每 5 分钟,令牌就会过期并使用refresh_token.
如果你愿意,你可以进一步降低它,喜欢 1 分钟。

但这是一个后端问题,需要更多代码。
甚至我会说一个需要的问题。

于 2021-08-10T15:08:59.440 回答
0

经过大量调试和控制台日志记录后,这是我的解决方案:更改this.$auth.logout()(基本上,当您按下注销按钮时调用此方法),改为:

this.$auth.logout({
  data: {
    refreshToken: this.$auth.strategies.local.refreshToken.get(),
  },
})

PS:如果您将您的策略​​(在 nuxt.config.js 中)称为“本地”以外的其他名称,您还应该将this.$auth.strategies.local.refreshToken.get(), 更改为:this.$auth.strategies.'your strategy name'.refreshToken.get()

于 2021-09-19T10:10:20.553 回答