Fastify Passport LocalStrategy: ошибка «Ожидается строка или буфер» при доступе к защищенному маршрутуJavascript

Форум по Javascript
Ответить
Anonymous
 Fastify Passport LocalStrategy: ошибка «Ожидается строка или буфер» при доступе к защищенному маршруту

Сообщение Anonymous »

Я реализую систему аутентификации Fastify, используя @fastify/passport с LocalStrategy. Ниже приведен плагин auth, который управляет сериализацией и десериализацией пользователей, а также настройкой локальной стратегии.

Код: Выделить всё

import fp from "fastify-plugin";
import fastifyPassport from "@fastify/passport";
import LocalStrategy from "passport-local";
import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
import { User } from "./types";
export default fp(async function auth(fastify: FastifyInstance) {
const { store, httpErrors } = fastify;
fastifyPassport.registerUserSerializer(async (user: { id: number }, request) => {
if (!user?.id) return httpErrors.notFound("User ID is missing");
return user.id;
});
fastifyPassport.registerUserDeserializer(async (id: number, request) => {
try {
const user: User[] = await store("users").where({ id }).limit(1);
if (!user || user?.length < 1) return null;
....
return sessionUser
} catch (error) {
console.error("Deserialization error", error);
return null;
}
});

async function handleUserRecovery(req: FastifyRequest, email: string, password: string) {
try {
const user: User[] = await store("users").where({ email }).limit(1);
if (!user || user?.length < 1) return false;
...
return sessionUser;
} catch (err) {
console.error("Error fetching user:", err);
return false;
}
}
fastifyPassport.use(
"local",
new LocalStrategy(
{
passReqToCallback: true,
usernameField: "email",
},
handleUserRecovery
)
);

await fastify.register(fastifyPassport.initialize());
await fastify.register(fastifyPassport.secureSession());
}, {
dependencies: ["fastify-env", "fastify-session", "fastify-store", "fastify-sensible"],
});

Проблема возникает, когда я пытаюсь получить доступ к защищенному маршруту, как показано ниже:

Код: Выделить всё

fastify.route({
method: "GET",
url: "/protected",
preValidation: fastifyPassport.authenticate("local", { authInfo: false }),
handler: async (req: FastifyRequest, res: FastifyReply) => {
return res.send({ msg: "ok" });
},
});

При вызове этого маршрута я всегда получаю следующую ошибку:

Код: Выделить всё

Attempted to send payload of invalid type 'object'. Expected a string or Buffer.

Более того, в журналах сервера я замечаю, что два входящих запроса регистрируются, как будто запрос обрабатывается дважды.
Вот подробное описание вывод журнала:

Код: Выделить всё

responseTime: 73.25737500190735
[01:00:23.679] ERROR (33597): server closing with error
err: {
"type": "FastifyError",
"message": "Attempted to send payload of invalid type 'object'. Expected a string or Buffer.",
"stack": FastifyError: Attempted to send payload of invalid type 'object'. Expected a string or Buffer.
}

Я ожидал, что этот маршрут будет аутентифицировать пользователей на основе адреса электронной почты и пароля и возвращать ответ типа { msg: "ok" . Вместо этого я получаю сообщение об ошибке:

Попытка отправить полезную нагрузку недопустимого типа «объект». Ожидается строка или буфер.

В журналах. Я также заметил, что запрос обрабатывается дважды, что неожиданно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... en-accessi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»