NodeJS REST-Authentifizierung mit Passport und OAuth2 + soziales Netzwerk
Ich arbeite anREST
api usingNodeJS
. Zur Authentifizierung habe ich mich für @ entschiedPassport
. Ich möchte wirklich RESTful api. Ich muss also Token anstelle von Sitzungen verwenden.
Ich möchte Benutzern erlauben, sich mit Benutzername und Passwort oder über soziale Netzwerke wie Facebook, Google und Twitter anzumelden.
Ich mache mein eigenesOAuth2.0
Server für die Ausgabe vonAccess
undRefresh tokens
usingoauth2orize
Modul. So kann ich jetzt neue Benutzer registrieren und diese dann als Token ausgeben. Ich bin diesem Tutorial gefolgt:
http: //aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb
Benutzer für Route überprüfen:
// api ------------------------------------------------------------------------------------
app.get('/api/userInfo',
passport.authenticate('bearer', { session: false }),
function(req, res) {
// req.authInfo is set using the `info` argument supplied by
// `BearerStrategy`. It is typically used to indicate scope of the token,
// and used in access control checks. For illustrative purposes, this
// example simply returns the scope in the response.
res.json({ user_id: req.user.userId, name: req.user.username, scope: req.authInfo.scope })
}
);
All das funktioniert ganz gut. Leider weiß ich nicht, wie ich die soziale Authentifizierung implementieren soll.
Ich habe dieses Tutorial gelesen:
http://scotch.io/tutorials/javascript/easy-node-authentication-facebook
Aber in diesem Tutorial machen sie keine wirklich RESTful-API. Ich habe bereits ein Benutzerschema gemäß diesem Tutorial implementiert, in dem Token für lokale Benutzer in getrennten Modellen gespeichert werden.
// define the schema for our user model
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
},
facebook: {
id: String,
token: String,
email: String,
name: String
},
twitter: {
id: String,
token: String,
displayName: String,
username: String
},
google: {
id: String,
token: String,
email: String,
name: String
}
});
Aber jetzt, wie kann ich den Benutzer verifizieren?
passport.authenticate('bearer', { session: false }),
dies verifiziert nur das Inhaber-Token gegenüber meiner Datenbank, aber wie kann ich soziale Token verifizieren? Vermisse ich etwas?