Необработанная ошибка отклонения: неверный синтаксис ввода для целого числа: «истина» Express + паспорт + postgreSQL - PullRequest
0 голосов
/ 08 ноября 2018

Может кто-нибудь сказать мне, что, черт возьми, происходит? Я пытаюсь сделать простую страницу входа, я использую knex с postreSQL и получаю странную ошибку, которую не могу понять:

Unhandled rejection error: invalid input syntax for integer: "true"
    at Connection.parseE (/home/idlesolution/Desktop/backend/user/user/node_modules/pg/lib/connection.js:554:11)
    at Connection.parseMessage (/home/idlesolution/Desktop/backend/user/user/node_modules/pg/lib/connection.js:379:19)
    at Socket.<anonymous> (/home/idlesolution/Desktop/backend/user/user/node_modules/pg/lib/connection.js:119:22)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

Вот мой код. Сначала я делаю почтовый запрос и подтверждаю его паспортом:

    router.post('/login', passport.authenticate('local', {
    successRedirect: '/user/profile',
    failureRedirect: '/',

}))

А затем я устанавливаю локальную стратегию в моем файле server.js:

passport.use(new localStrategy((username, password, done) => {
    knex('users').select('password').where({username: username}).then((data) => {
        if(data.length === 0){
            return done(null, false)
        } else{

            return done(null, true);
        }
    })
}))

Ошибка появляется, когда я набираю информацию о существующем пользователе, поэтому она находится в блоке else. Когда я изменяю значение true на случайную строку, ошибка все еще присутствует, однако, если я изменяю ее на false, ошибки не возникает, но, очевидно, я не хочу оставлять это таким образом

1 Ответ

0 голосов
/ 09 ноября 2018

Это потому, что вы возвращаете true после того, как пользователь найден, где вы должны возвращать user сам. Этот user объект будет затем использоваться для serialize и при последующих запросах deserialize пользователя. Кроме того, вы должны попытаться получить id (вместе с паролем) пользователя, которого вы можете использовать для сериализации.

Итак, ваш код должен выглядеть примерно так

passport.use(new localStrategy((username, password, done) => {
    knex('users').select('id', 'password').where({username: username}).then((data) => {
        if(data.length === 0){
            return done(null, false)
        } else {
            return done(null, data);
        }
    });
}));
...