Работа с Node, Express и Passport.
Хорошо, поэтому мы с моей командой создаем REST API для двухстороннего приложения типа рынка. Мы уже создали базовую локальную стратегию для входа в систему электронной почты и пароля.
Мы хотим сделать агентом API-интерфейс API агентом, поэтому мы можем использовать API через Интернет, Android или iOS.
Но где нас путают с потоком входа FB. Вопрос в том, что именно происходит за кулисами в Passportjs. Мы рассмотрели стратегии "паспорт-фейсбук" и "паспорт-facebook-токен" и не можем решить, с кем идти.
Это мое текущее понимание потока:
Если это правильно, мне лучше, если бы клиент получил access_token из FB, а затем отправил его мне или просто позволил FB обработать его через перенаправления и URL-адрес обратного вызова?
Паспорт-маркер:
passport.use('facebook-token', new FacebookTokenStrategy( {
clientID: 'xxx',
clientSecret: 'xxx'
}, function(accessToken, refreshToken, profile, done) {
// asynchronous
//console.log("into passport auth");
process.nextTick(function() {
User.findOne({'facebook.id': profile.id}, function(error, user) {
console.log("user is " + JSON.stringify(user));
console.log("profile is " + JSON.stringify(profile));
//do user creation stuff etc.
return done(error, user);
});
});
}));
authRouter.post('/facebook', passport.authenticate('facebook-token'), function (req, res) {
console.log("into controller");
if (req.user){
//log the user in since they successfully authenticated with facebook.
req.login(user);
res.status(200).end();
} else {
res.status(401).end();
}
});
Паспорт-facebook:
passport.use('facebook', new FacebookStrategy( {
callbackURL: "http://75.128.65.176:8080/auth/facebook/callback",
clientID: 'xxx',
clientSecret: 'xxx'
}, function(accessToken, refreshToken, profile, done) {
// asynchronous
//console.log("into passport auth");
process.nextTick(function() {
User.findOne({'facebook.id': profile.id}, function(error, user) {
console.log("user is " + JSON.stringify(user));
console.log("profile is " + JSON.stringify(profile));
//do user creation stuff etc.
return done(error, user);
});
});
}));
// Redirect the user to Facebook for authentication. When complete,
// Facebook will redirect the user back to the application at
// /auth/facebook/callback
authRouter.get('/facebook', passport.authenticate('facebook'));
// Facebook will redirect the user to this URL after approval. Finish the
// authentication process by attempting to obtain an access token. If
// access was granted, the user will be logged in. Otherwise,
// authentication has failed.
authRouter.get('/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/login' }));
Любые детали/подробности о том, как этот поток действительно работает, будут НАСТОЯТЕЛЬНО оценены!