User.findOne не является функцией для knexjs (postgresql) - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь использовать паспорт, но я получаю эту ошибку в своем коде

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"
}
...