Autenticação REST do NodeJS usando a rede social Passport e OAuth2 +

Eu estou trabalhando emREST API usandoNodeJS. Para autenticação, decidi usarPassport. Eu quero API verdadeiramente RESTful. Então isso significa que eu tenho que usar tokens em vez de sessões.

Quero permitir que os usuários façam login usando nome de usuário e senha ou usando redes sociais como Facebook, Google e Twitter.

Eu faço o meuOAuth2.0 servidor para emissãoAccess eRefresh tokens usandooauth2orize módulo. Então agora eu posso registrar um novo usuário e depois emitir tokens. Eu segui este tutorial:

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

Verificando usuário para a rota:

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

Tudo isso funciona muito bem. Infelizmente, não sei como implementar autenticação social.

Eu estava lendo este tutorial:

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

Mas neste tutorial, eles não estão criando uma API verdadeiramente RESTful. Eu já implementei o esquema do usuário de acordo com este tutorial, onde os tokens para usuário local são armazenados em 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
    }
});

Mas agora, como posso verificar o usuário?

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

isso está verificando apenas o token do portador em relação ao meu banco de dados, mas como posso verificar os tokens sociais? Estou esquecendo de algo?

questionAnswers(4)

yourAnswerToTheQuestion