使用Passport LocalStrategy,knex和Postgres发生意外的令牌错误

时间:2019-05-25 11:21:40

标签: node.js express knex.js passport-local postgresql-11

我正在尝试使用本地护照策略和到PostgreSQL的knex连接在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()函数来查找用户

queries.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 个答案:

答案 0 :(得分:1)

错误可能来自promise语法:

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之类的短绒布。