这篇Reddit
的帖子建议“在signOut事件中调用一个API。后端处理了剩下的部分。”
当然,让我们写下来:
await fetch('/api/auth/signout', { method: "POST" });
除了请求通过302
重定向到GET /api/auth/signout?csrf=true
,然后重定向到GET /auth/sign-out
,我的自定义注销页面;用户未 checkout 。
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
请求时注销并且不被重定向。这可能吗?
2条答案
按热度按时间dkqlctbz1#
我差一点就成功了。这是最后成功的请求:
该回调仅用于不被重定向到登录页面,这是默认行为。
即使主体是字符串,
Content-type
也是JSON;这告诉Next.js如何解析body的内容。xqk2d5yq2#
使用signIn回调并返回一个url/string。
然而,我的建议(以及next-auth的建议)是将它们返回到错误页面。如果返回false,默认情况下会发生这种情况。
如果你想进一步阅读,这里是他们的文档。