Неожиданная ошибка токена при использовании Passport LocalStrategy, knex и postgres - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь использовать стратегию passport-local и knex-соединение с postgresql для аутентификации пользователя в приложении nodejs.Ниже приведены зависимости к файлу приложения и экземпляру LocalStrategy:

index.js

var express = require('express'), 
    app = express(),
    server = require('http').createServer(app),
    session = require('express-session'),
    passport = require('passport')
    bcrypt = require('bcryptjs')
    LocalStrategy = require('passport-local').Strategy;
    db = require('./db');
    queries = require('./queries');

app.use(passport.initialize());
app.use(passport.session());
options = {};

passport.use(new LocalStrategy(options, (username, password, done) =>{ 
    queries.findOne().then((user)) => {
            console.log(user)
            if (!user) return done(null, false);
            if (!autHelpers.comparePass(password, user.password)) {
                return done(null, false);
            } else {
                return done(null, user);
            }
        }
}

));

В файле запросов я разместил findOne () функция для поиска пользователей

query.js

const knex = require ('./db');

module.exports = {
    findOne() {
        return knex('users').where("username", username).first()
    }
}

Однако при запуске приложения в консоли выдается следующая ошибка:

.getOne ()

SyntaxError: неожиданный токен.

при createScript (vm. Js: 80: 10)

...

Кажется, по какой-то причине он не принимает оператор queries.findOne().Я попробовал passport.use без операторов внутри => {}, и это не привело к ошибке в приложении.

Должен ли я писать queries.findOne() другим способом?Я также думал об обёртывании этой функции внутри app.use(), но я чувствую, что это не логично.

Кажется, я где-то сделал опечатку, но все, что я пробую, ведет в тупик, и я не могу понять этот простой.

1 Ответ

1 голос
/ 26 мая 2019

Ошибка, вероятно, связана с синтаксисом обещания:

queries.findOne().then((user)) => {
   ...
})

Это должно быть переписано как:

queries.findOne().then((user) => {
   ...
})

И с полным блоком ниже:

passport.use(new LocalStrategy(options, (username, password, done) =>{ 
    queries.findOne().then((user) => {
        console.log(user)
        if (!user) return done(null, false);
        if (!autHelpers.comparePass(password, user.password)) {
            return done(null, false);
        } else {
            return done(null, user);
        }
    }) // There was also a missing end parenthesis here
}));

Чтобы предотвратить подобные синтаксические проблемы в будущем, вы можете использовать линтер, такой как eslint .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...