是否有使用PostgreSQL设置PassportJS的演练教程(即用PostgreSQL替换MongoDB)?
答案 0 :(得分:15)
嗯这是开放的一段时间,但是因为我发现自己在这里遇到了同样的问题。你唯一要做的就是用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);
});
它应该准备好了。希望这会有所帮助。
答案 1 :(得分:1)
Joe的回答对我非常有帮助!如果其他人遇到以下错误:
TypeError: Converting circular structure to JSON
我发现修改:
(username, password, done) => {
将req包括在内有帮助:
(req, email, password, done)
干杯
答案 2 :(得分:0)
有许多ORM可用于使用nodeJS的Postgres。例如。 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