问题 使用PostgreSQL安装PassportJS


是否有一个使用PostgreSQL设置PassportJS的演练教程(即用PostgreSQL替换MongoDB)?


10712
2018-02-27 19:47


起源

点击这里: github.com/ocastillo/nodejs-mysql-boilerplate - apneadiving
不知道具体的教程,但你可以使用sequelize.js它将允许你在mysql,postgreSQL等之间自由移动,它允许你使用键作为列名称将JSON对象转储到表中。 - opcode


答案:


好吧,这是开放一段时间,但因为我发现自己在这里有同样的问题。你唯一要做的就是用Postgres定义localStrategy,如下所示:

    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'});
      });
  }));

然后定义passport.serializeUser和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);
});

它应该准备好了。希望这可以帮助。


15
2017-12-21 11:51



你的回答对我很有帮助,谢谢! - Özgen Eren
OOC,什么支持哈希摇滚语法 =>{ ?这会为我创建一个预期的令牌错误。 - Trip
这是ES6语法。更多信息: es6-features.org/#ExpressionBodies - Joel Matias


乔的回答对我很有帮助!万一其他人遇到以下错误:

TypeError: Converting circular structure to JSON

我发现修改:

(username, password, done) => {

包括req这样的帮助:

(req, email, password, done)

干杯


1
2017-09-18 14:08





有很多ORM可用于Postgres与nodeJS。例如。 Sequelize,CaminateJS等您可以根据自己的要求和方便使用其中任何一种。

当然,您可以使用passportJS。我发现的一些好文章

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


0
2018-06-28 12:40