2016-04-21 10 views
8

Ich bin etwas neu in Node.js Entwicklung und arbeite derzeit an einem Haustier-Projekt in meiner Freizeit.Was ist der beste Weg, um Pass-Facebook und Pass-JWT zu mischen?

Bisher habe ich JWT-Authentifizierung mit passport und passport-jwt für die Strategie erstellt und ich verwende es in allen meiner RESTful APIs.

Jetzt denke ich daran, dies mit einer Art von Facebook-Authentifizierung zu mischen, die immer noch mit Token-Authentifizierung bleiben wollen.

Derzeit ist dies, wie ich zu erzeugen und das Token zu erhalten:

exports.authenticate = function(req, res) { 
    User.findOne({ 
     email: req.body.email 
    }, function(err, user) { 
     if (err) 
      return res.status(400).send(getErrorMessage(err)); 

     if (!user) { 
      res.status(400).send({ 
       success: false, 
       message: 'Authentication failed. User not found.' 
      }); 
     } else { 
      if (user.checkPassword(req.body.password)) { 

       let token = jwt.encode(user, config.secretPhrase); 

       res.json({ 
        success: true, 
        token: 'JWT ' + token 
       }); 
      } else { 
       res.status(401).send({ 
        success: false, 
        message: 'Authentication failed. Wrong password.' 
       }); 
      } 
     } 
    }); 
}; 

app.route('/api/users/authenticate') 
     .post(user.authenticate); 

Und ich zur Validierung Folgendes tun:

let user = require('../../app/controllers/user-controller'); 
app.route('/api/todos') 
     .get(user.validateLogin, todos.list) 
     .post(user.validateLogin, todos.create); 

Benutzer-Controller:

exports.validateLogin = passport.authenticate('jwt', { 
    session: false 
}); 

Jedermann kann einen guten Weg vorschlagen, die beiden Strategien zu kombinieren? Soll ich express-jwt verwenden? Was ist der Unterschied zwischen Express-JWT und Pass-JWT?

Antwort

0

Es sieht so aus, als würden Sie derzeit das Token an den Endbenutzer zurücksenden. Wie speichern Sie diese Clientseite? Ich würde empfehlen, eine einfache JWT-Bibliothek wie jsonwebtoken zu verwenden und das Token als httpOnly-Cookie festzulegen. Wenn Sie es derzeit in localStorage speichern, sind Sie möglicherweise anfälliger für einen XSS-Angriff. Hier ist ein Kern mit, wie ich derzeit Umgang mit Einstellung und JWT für einen Benutzer überprüft: https://gist.github.com/briancw/8c2021817c3bd34972e8e8deb6048a4f

0

Sie passport-facebook wie verwenden können, was Sie getan haben mit passport-jwt mit neuer Strategie, so dass Sie Facebook-Benutzertoken in Ihrer Datenbank speichern und Geben Sie Ihr Token zurück