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?