Autenticación NodeJS REST usando Passport y la red social OAuth2 +

Estoy trabajando en esoREST api usandoNodeJS. Para la autenticación decidí usarPassport. Quiero API realmente RESTful. Entonces significa que tengo que usar tokens en lugar de sesiones.

Quiero permitir que los usuarios inicien sesión con nombre de usuario y contraseña, o con redes sociales como Facebook, Google y Twitter.

Hago mi propioOAuth2.0 servidor para emitirAccess yRefresh tokens utilizandooauth2orize módulo. Entonces ahora puedo registrar un nuevo usuario y luego emitirles tokens. Seguí este tutorial:

http://aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb/

Verificación del usuario para la ruta:

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

Todo esto funciona bastante bien. Lamentablemente, no sé cómo implementar la autenticación social.

Estaba leyendo este tutorial:

http://scotch.io/tutorials/javascript/easy-node-authentication-facebook 

Pero en este tutorial no están haciendo una API verdaderamente RESTful. Ya implementé el esquema de usuario de acuerdo con este tutorial donde los tokens para usuarios locales se almacenan en modelos separados.

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

Pero ahora, ¿cómo puedo verificar el usuario?

passport.authenticate('bearer', { session: false }),

esto es verificar solo token de portador contra mi db, pero ¿cómo puedo verificar tokens sociales? ¿Me estoy perdiendo de algo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta