2014-02-27 20 views
11

是否有使用PostgreSQL設置PassportJS的演練教程(即用PostgreSQL替換MongoDB)?使用PostgreSQL安裝PassportJS

+2

檢查這裏

(req, email, password, done) 

乾杯:https://github.com/ocastillo/nodejs-mysql-boilerplate – apneadiving

+0

不知道具體的教程,但你可以使用sequelize.js它將允許您在mysql,postgreSQL等之間自由移動,並允許您使用鍵作爲列名將JSON對象轉儲到表中。 – opcode

回答

14

嗯,這是開放一段時間,但因爲我發現自己在這裏有同樣的問題,它走了。你所要做的唯一事情是與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); 
}); 

它應該準備好去。希望這可以幫助。

+0

你的答案幫了我很多,謝謝! –

+0

OOC,什麼支持hash rock語法'=> {'?這會爲我創建一個預期的令牌錯誤。 – Trip

+0

這就是ES6語法。更多信息在這裏:http://es6-features.org/#ExpressionBodies –

1

喬的回答是超對我很有幫助!萬一別人運行到以下錯誤:

TypeError: Converting circular structure to JSON 

我發現修改:

(username, password, done) => { 

包括這樣幫助REQ: