Я использую PassportJS для обработки аутентификации FB для браузеров и мобильных клиентов. Для веб-пользователей я использую Passport FacebookStrategy, и это работает по назначению. Я также хотел бы разрешить мобильным клиентам получать доступ к моему API. Я пытаюсь использовать Passport FacebookTokenStrategy, чтобы облегчить это. Кажется, это работает с одной небольшой проблемой. Когда мобильный клиент делает запрос GET на сервер, используется функция FacebookTokenStrategy и активируется функция проверки обратного вызова. В функции проверки я вижу, что пользовательский профиль доступен, и поэтому аутентификация прошла успешно. Однако статус HTTP 404 отправляется обратно в ответ на мобильный клиент. Я не уверен, как правильно настроить это. Это то, что я пытаюсь в настоящее время:PassportJS - FacebookTokenStrategy возвращает 404
// Web based auth
passport.use(new FacebookStrategy({
clientID: Config.facebook.clientID,
clientSecret: Config.facebook.clientSecret,
callbackURL: "http://localhost/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate(profile, function(err, user){
done(err, user);
});
}
));
// Mobile client auth
passport.use(new FacebookTokenStrategy({
clientID: Config.facebook.clientID,
clientSecret: Config.facebook.clientID
},
function(accessToken, refreshToken, profile, done) {
console.log(profile);
User.findOrCreate(profile, function(err, user){
done(err, user);
});
}
));
// Redirect the user to Facebook for authentication. When complete,
// Facebook will redirect the user back to the application at
// /auth/facebook/callback
exports.fb_auth = passport.authenticate('facebook',{ scope: 'email' });
// 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.
exports.fb_callback = passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/login' });
// Mobile Authentication
exports.mobile_fb_auth = passport.authenticate('facebook-token');
Должен ли я предоставлять passport.authenticate ('facebook-маркер'); с некоторым дополнительным обратным вызовом «onsuccess»? Это имеет смысл в контексте веб-клиента, но я не уверен, как это следует обрабатывать с помощью стратегии facebook-token.
Привет. Вы получили причину 404 вопроса. Я столкнулся с тем же вопросом – shanks
Привет, У меня были похожие проблемы. Прежде всего, я вижу, что вы используете Config.facebook.clientID как clientID, так и clientSecret. Может, это может быть? Вы реализовали метод User.findOrCreate? Вы выполнили паспорт.serializeUser и passport.deserializeUser после app.use (passport.initialize())? – jonasonline
btw ... Я могу порекомендовать редактор [Brackets] (http://brackets.io), если вы его не попробовали. Он имеет отличный отладчик для узла под названием [Тесей] (https://github.com/adobe-research/theseus). Странно, что вы получите 404 тысячи ... Было бы более полезно, если бы это было 401 или 500 ... – jonasonline