【问题标题】:How to sign out using the POST /api/auth/signout endpoint with Next Auth?如何使用带有 Next Auth 的 POST /api/auth/signout 端点注销?
【发布时间】:2022-08-18 22:56:01
【问题描述】:

这个Reddit 帖子建议进行“在signOut 事件中的api 调用。后端处理其余部分。”

当然,让我们写它:

await fetch(\'/api/auth/signout\', { method: \"POST\" });

除非请求通过302 重定向到GET /api/auth/signout?csrf=true,后者又重定向到GET /auth/sign-out,我的自定义注销页面;用户未注销。

documentation 确实指定了“POST 提交需要来自 /api/auth/csrf\ 的 CSRF 令牌”,但是没有使用示例。

点击 /api/auth/csrf 我得到一个 JSON 响应,所以我只是将该值用作初始 POST 请求的主体:

await fetch(\'/api/auth/signout\', {
  method: \"POST\",
  body: await fetch(\'/api/auth/csrf\').then(rs => rs.text())
});

它确实发出了请求,然后添加了{\"csrfToken\":...} 的有效负载,但重定向相同,并且用户仍未注销。

我的目标是在调用初始 POST 请求时退出而不被重定向。那可能吗?

    标签: node.js next.js next-auth


    【解决方案1】:

    我很接近。这是最终工作的请求:

    await fetch('/api/auth/signout?callbackUrl=/api/auth/session', {
      method: "POST",
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      }
      body: await fetch('/api/auth/csrf').then(rs => rs.text())
    });
    

    回调仅用于不重定向到登录页面,这是默认行为。

    Content-type 是 JSON,即使正文是字符串;这告诉 Next.js 如何解析正文的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-12
      • 2022-10-15
      • 2017-02-28
      • 1970-01-01
      • 2021-07-30
      • 2017-03-14
      • 2023-01-20
      • 2021-11-26
      相关资源
      最近更新 更多