Я пытаюсь использовать паспорт, но я получаю эту ошибку в своем коде
TypeError: User.findOne is not a function
Я следовал документации в passport.js, и это мой код
const HeaderAPIKeyStrategy = require('passport-headerapikey').HeaderAPIKeyStrategy
const knexDb = knex({ client: 'pg', connection: {
host : process.env.HOST,
user : process.env.USER,
password : process.env.PASSWORD,
database : process.env.DATABASE,
port: process.env.PORT
}});
const bookshelf = require('bookshelf');
const securePassword = require('bookshelf-secure-password');
const db = bookshelf(knexDb);
db.plugin(securePassword);
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
});
passport.use(new HeaderAPIKeyStrategy(
{ header: 'Authorization', prefix: 'Api-Key ' },
false,
function(apikey, done) {
console.log(apikey)
User.findOne({ apikey: apikey }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
return done(null, user);
});
}
));
app.post('/api/authenticate',
passport.authenticate('headerapikey', { session: false }),
(req, res) => {
res.json({ message: "Authenticated" })
});
I 'Я читал о knexjs и postgresql, и я думаю, что для psql используется другое использование sequelizerjs, но документы passportjs только для mongoos, так что кто-то может помочь мне понять проблему в моем коде и то, что я пропускаю, и если есть хорошие документыиспользовать sequelize для psql для этой цели кода, используя kenxjs
После поиска полезной информации я обновил свой код до следующего: но я до сих пор не знаю, как он работает, поэтому кто-то может поставить меня направильный проход:
passport.use(new HeaderAPIKeyStrategy(
{ header: 'Authorization', prefix: 'Api-Key ' },
false,
function(apikey, done) {
console.log(apikey)
User.forge().where({ apikey: apikey }).fetch().then((user) => {
// console.log('err', err)
console.log('user', user)
done(null, user);
});
// User.findOne({ apikey: apikey }, function (err, user) {
// console.log('err', err)
// console.log('user', user)
// if (err) { return done(err); }
// if (!user) { return done(null, false); }
// return done(null, user);
// });
}
));
но теперь, когда я res.json(req.body)
, я получаю этот ответ
{
"token": "jfaskdl"
}