Pracuję nad aplikacją REST
api, używając NodeJS
. Do uwierzytelnienia postanowiłem użyć Passport
. Chcę naprawdę RESTOWNEGO API. Oznacza to, że muszę używać tokenów zamiast sesji.Uwierzytelnianie za pomocą usługi Rode NodeJS przy użyciu sieci społecznościowej Passport i OAuth2 +
Chcę umożliwić użytkownikom logowanie przy użyciu nazwy użytkownika i hasła lub przy użyciu sieci społecznościowych, takich jak Facebook, Google i Twitter.
mogę zrobić własny serwer OAuth2.0
wydawania Access
i Refresh tokens
użyciu modułu oauth2orize
. Teraz mogę zarejestrować nowego użytkownika, a następnie wydać tokeny. Śledziłem ten tutorial:
http://aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb/
Weryfikacja użytkownika do trasy:
// 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 })
}
);
Wszystko to działa całkiem dobrze. Niestety nie wiem, jak wdrożyć uwierzytelnianie społeczne.
czytałem ten poradnik:
http://scotch.io/tutorials/javascript/easy-node-authentication-facebook
Jednak w tym poradniku nie robią naprawdę REST API. W tym samouczku zaimplementowałem już schemat użytkownika, w którym tokeny dla użytkownika lokalnego są przechowywane w osobnych modelach.
// 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
}
});
Ale jak mogę zweryfikować użytkownika?
passport.authenticate('bearer', { session: false }),
ta sprawdza tylko okaziciela żeton przed moim db, ale w jaki sposób mogę sprawdzić znaki społeczne? Czy czegoś brakuje?
można opracować w jaki sposób ostatecznie rozwiązać ten? Czy możesz zostawić swój uchwyt na Twitterze za dalszą korespondencję. Dzięki :) –
i zamiast samouczka aleksandrov, dlaczego nie można użyć paszportu-oauth? http://passportjs.org/guide/oauth/ –
Po co także wdrażać OAuth dla własnego serwera? dlaczego nie użyć paszportu lokalnego, a następnie wydać żetony według strategii na okaziciela? –