Установка PassportJS с PostgreSQL

Есть ли учебное руководство по настройке PassportJS с PostgreSQL (т.е. замена MongoDB на PostgreSQL)?

Ответ 1

Хорошо, что это открыто на некоторое время, но так как я обнаружил, что с тем же вопросом здесь он идет. Единственное, что вам нужно сделать, это определить localStrategy с Postgres, например:

    passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'pass'
  },
  (username, password, done) => {
    log.debug("Login process:", username);
    return db.one("SELECT user_id, user_name, user_email, user_role " +
        "FROM users " +
        "WHERE user_email=$1 AND user_pass=$2", [username, password])
      .then((result)=> {
        return done(null, result);
      })
      .catch((err) => {
        log.error("/login: " + err);
        return done(null, false, {message:'Wrong user name or password'});
      });
  }));

а затем определите паспорт. СериализоватьUser и passport.deserializeUser:

passport.serializeUser((user, done)=>{
    log.debug("serialize ", user);
    done(null, user.user_id);
  });

  passport.deserializeUser((id, done)=>{
    log.debug("deserualize ", id);
    db.one("SELECT user_id, user_name, user_email, user_role FROM users " +
            "WHERE user_id = $1", [id])
    .then((user)=>{
      //log.debug("deserializeUser ", user);
      done(null, user);
    })
    .catch((err)=>{
      done(new Error(`User with the id ${id} does not exist`));
    })
  });

Затем определите свой маршрут:

app.post('/', passport.authenticate('local'), (req, resp)=>{
  log.debug(req.user);
  resp.send(req.user);
});

И он должен быть готов к работе. Надеюсь, это поможет.

Ответ 2

Ответ Джо был очень полезен для меня! В случае, если кто-то еще сталкивается со следующей ошибкой:

TypeError: Converting circular structure to JSON

Я обнаружил, что изменение:

(username, password, done) => {

включить req как таковой помог:

(req, email, password, done)

Приветствия

Ответ 3

Существует много доступных ORM, которые вы можете использовать для Postgres с nodeJS. Например. Sequelize, CaminateJS и т.д. Вы можете использовать любой из них в соответствии с вашими требованиями и удобством.

И, конечно, вы можете использовать паспортный код с этим. Некоторые хорошие статьи, что я нашел,

http://www.hamiltonchapman.com/blog/2014/3/25/user-accounts-using-sequelize-and-passport-in-nodejs

https://sarabinns.com/tag/passport-js-sequelize-postgresql/

http://anneblankert.blogspot.in/2015/06/node-authentication-migrate-from.html