我正在尝试使用本地护照策略和到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()
中,但我觉得这不合逻辑。
似乎我在某处打错了字,但是我尝试的所有方法都导致了死胡同,而且我似乎无法弄清楚这个简单的错字。
答案 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之类的短绒布。