2014-02-27 7 views
11

Gibt es eine praktische Einführung zum Einrichten von PassportJS mit PostgreSQL (d. H. Ersetzen von MongoDB durch PostgreSQL)?Installation von PassportJS mit PostgreSQL

+2

Check hier : https://github.com/ocastillo/nodejs-mysql-boilerplate – apneadiving

+0

Nicht bewusst, ein bestimmtes Tutorial, aber Sie können verwenden sequelize.js Es wird Ihnen erlauben, sich frei zwischen mysql, postgreSQL usw. zu bewegen und Sie können JSON-Objekte in einer Tabelle speichern, indem Sie die Schlüssel als Spaltennamen verwenden. – opcode

Antwort

14

Nun, das ist für eine Weile offen, aber da ich mich mit dem gleichen Problem hier gefunden habe, geht es. Das einzige, was Sie tun müssen, ist die localStrategy mit Postgres definieren wie folgt:

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

und dann definieren passport.serializeUser und 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`)); 
    }) 
    }); 

Dann definieren Sie Ihre Route:

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

Und es sollte bereit sein zu gehen. Hoffe das hilft.

+0

Ihre Antwort hat mir sehr geholfen, danke! –

+0

OOC, was unterstützt diese Hash-Rock-Syntax '=> {'? Dies erzeugt einen erwarteten Token-Fehler für mich. – Trip

+0

Das ist ES6 Syntax. Mehr Infos hier: http://es6-features.org/#ExpressionBodies –

0

Es gibt viele ORM verfügbar, was Sie für Postgres mit nodeJS verwenden können. Z.B. Sequelize, CaminateJS usw. Sie können jede von diesen gemäß Ihrer Anforderung und Bequemlichkeit verwenden.

Und natürlich können Sie passJS mit diesem verwenden. Einige gute Artikel, was ich gefunden sind

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

1

Joe Antwort auf mich super hilfsbereit war! Falls sich jemand anderes in den folgenden Fehler läuft:

TypeError: Converting circular structure to JSON 

fand ich, dass ändern:

(username, password, done) => { 

die erf enthalten als solche geholfen:

(req, email, password, done) 

Prost

Verwandte Themen