我在我的Express服务器上使用Lucia,这是我的Flutter应用程序的支持。我已经按照文档并在Express中创建了一个注销路由。JavaScript代码按预期工作。
router.post("/signout", async (req, res) => {
const authRequest = auth.handleRequest(req, res);
const session = await authRequest.validate(); // or `authRequest.validateBearerToken()`
console.log(req.headers);
console.log(req.body);
if (!session) {
return res.sendStatus(401);
}
await auth.invalidateSession(session.sessionId);
authRequest.setSession(null);
return res.status(200).json({
status: "success",
message: "User signed out successfully"
});
});
字符串
当我从Dart调用这个端点时,它总是返回401,但是当使用fetch from JS发出相同的请求时,它正确地返回200并注销用户。注意:当我将此端点更改为GET端点时,dart get请求按预期正常工作,端点返回200。我不知道我做错了什么,这是Dart post请求:
Future<HttpClientResponse> _postWithSession(String endpoint,
{Map<String, String>? body}) async {
var cookies = await _getCookies(endpoint);
if (cookies.isEmpty) {
throw Exception("Session cookie not found");
}
var req = await _client.postUrl(Uri.parse(endpoint));
req.cookies.addAll(cookies);
req.headers
.set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
body != null ? req.write(jsonEncode(body)) : req.write(jsonEncode({}));
var res = await req.close();
await _updateCookies(endpoint, res.cookies);
return res;
}
型
下面是一个成功的请求应该看起来像cURL:
curl "http://localhost:3000/signout" -X POST -H "Origin: http://localhost:3000" -H "Cookie: auth_session=<session_key>"
型
1条答案
按热度按时间hmtdttj41#
字符串