Nuxt Auth 如何从数据库中删除刷新令牌?
Posted
技术标签:
【中文标题】Nuxt Auth 如何从数据库中删除刷新令牌?【英文标题】:Nuxt Auth how to delete refresh token from database? 【发布时间】:2021-10-14 03:45:03 【问题描述】:我在我的应用程序中实现 Nuxt Auth(本地/刷新)已完成一半。我在数据库中有一个存储刷新令牌的表,我想在 Nuxt Auth 注销时从数据库中删除刷新令牌。 Nuxt Auth 没有将刷新令牌发送到我的端点,因此我无法查找它并将其从数据库中删除。
Nuxt Auth 在登录时正确获取令牌和用户详细信息,并正确调用我的注销 API 端点,它只是发送一个空正文。
package.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)
)
【问题讨论】:
【参考方案1】:经过大量调试和控制台日志记录后,这是我的解决方案:
将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()
【讨论】:
【参考方案2】:您绝对应该不通过 HTTP 发送 SQL。
要么通过/expire
等路径向后端发送一些 ID,要么让令牌自行过期。
我的公司正在使用 5 分钟的令牌到期时间。这意味着每 5 分钟,令牌就会过期并使用 refresh_token
刷新。
如果你愿意,你可以进一步降低这个值,比如 1 分钟。
但这是一个后端问题,需要更多代码。 甚至是我会说的需求问题。
【讨论】:
我理解刷新令牌的概念,这就是我想要做的。我不确定我的问题是否明确指出这是一个专门关于 Nuxt/Auth 包的问题。refresh_token
可以在您的浏览器中找到。在 cookie 或 localStorage 中,具体取决于您的设置。只需从那里删除它。
是的,Nuxt/Auth 已经自动为我从 cookies/localstorage 中删除了令牌。但是,它提供了一个用于注销的 API 调用,从我在文档中阅读的内容来看,它似乎旨在将刷新令牌发送回 API“删除”端点(refreshToken.data 属性)。我总是可以从 cookie 中获取令牌,但我希望不必进行 2 个 API 调用,因为它可以在 Nuxt/Auth 提供的一个中完成。
最简单的调试方法是在 Nuxt 应用程序中注销,让nuxt/auth
将有效负载发送到 API 上的/logout
路径,然后在路由器或路由器中查看结果控制器。无需进行 2 次 API 调用。
是的,这就是我一直在做的事情,也是促使我提出这个问题的原因。我在后端的授权标头中获取了 accessToken,但是找不到 refreshToken。 Nuxt/Auth 在删除请求中发送一个空正文。我还尝试将请求从“删除”更改为“发布”,但无济于事。以上是关于Nuxt Auth 如何从数据库中删除刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章
令牌过期时,Nuxt Auth Module c5 不会自动刷新令牌
如何从 Firebase.auth.currentUser Android Kotlin 获取刷新令牌