NodeJS REST-аутентификация с использованием Passport и социальной сети OAuth2 +

Я работаю наREST API с использованиемNodeJS, Для аутентификации я решил использоватьPassport, Я хочу действительно RESTful API. Так что это означает, что я должен использовать токены вместо сессий.

Я хочу, чтобы пользователи входили в систему, используя имя пользователя и пароль, или используя социальные сети, такие как Facebook, Google и Twitter.

Я делаю свой собственныйOAuth2.0 сервер для выдачиAccess а такжеRefresh tokens с помощьюoauth2orize модуль. Так что теперь я могу зарегистрировать нового пользователя и затем выдать ему токены. Я следовал этому уроку:

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

Проверка пользователя для маршрута:

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

Все это работает довольно хорошо. К сожалению, я не знаю, как реализовать социальную аутентификацию.

Я читал этот урок:

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

Но в этом уроке они не делают действительно RESTful API. Я уже реализовал пользовательскую схему в соответствии с этим руководством, где токены для локального пользователя хранятся в отдельных моделях.

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

Но теперь, как я могу проверить пользователя?

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

это проверяет только токен на предъявителя для моей базы данных, но как я могу проверить социальные токены? Я что-то пропустил?

Ответы на вопрос(4)

Ваш ответ на вопрос