У меня есть приложение express, которое использует аутентификацию Facebook через Passport. js и стратегию passport-facebook. Я следовал документации о том, как обрабатывать аутентификацию.
Все работает нормально ... , пока Facebook не попытается сообщить об ошибке через URL обратного вызова. В этом случае я получаю неперехваченное исключение FacebookAuthorizationError, и не вызывается errorRedirect.
Конечные пользователи видят «Внутреннюю ошибку сервера» в результате неперехваченного исключения, и я не соблюдаю Руководство по разработке Facebook ...
URL, вызывающий исключение
http://localhost:8081/auth/facebook/callback?error_code=1340031&error_message=Unable+to+Log+In%3A+There+is+a+60-minute+delay+before+new+accounts+can+log+in+to+any+applications.+Please+try+again+in+an+hour.#_=_
Исключение (усечено):
FacebookAuthorizationError: Unable to Log In: There is a 60-minute delay before new accounts can log in to any applications. Please try again in an hour.
at Strategy.authenticate (/Users/Dan/project/node_modules/passport-facebook/lib/strategy.js:81:23)
at attempt (/Users/Dan/project/node_modules/passport/lib/middleware/authenticate.js:361:16)
at authenticate (/Users/Dan/project/node_modules/passport/lib/middleware/authenticate.js:362:7)
at Layer.handle [as handle_request] (/Users/Dan/project/node_modules/express/lib/router/layer.js:95:5)
Я прочитал более старый пост ( Паспорт не перенаправлять на «failRedirect» при сбое с Facebook ), что это может быть открытой проблемой.
Я думаю, этот плагин для паспорта будет чрезвычайно популярен, и что у кого-то будет обходной путь - Кто-нибудь знает?
Заранее большое спасибо.
Express Код инициализации:
function initExpress() {
const express = require('express'),
passport = require('passport'),
LocalStrategy = require('passport-local'),
FacebookStrategy = require('passport-facebook').Strategy,
expressSession = require('express-session');
}
let app = express();
app.use(expressSession(
{
secret: secret,
resave: false,
saveUninitialized: false
}
));
app.use(flash());
passport.use(new LocalStrategy(User.authenticate()));
passport.use(new FacebookStrategy({
clientID: process.env.FACEBOOK_APP_ID,
clientSecret: process.env.FACEBOOK_APP_SECRET,
callbackURL: `${process.env.SERVER_API_URL}/auth/facebook/callback`,
profileFields: ['id', 'displayName', 'name', 'picture']
},
function(accessToken, refreshToken, profile, done) {
facebookFindOrCreateUser(accessToken, refreshToken, profile, done);
}
));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
etc..
}
/ auth / route:
const express = require('express'),
router = express.Router(),
passport = require('passport');
router.get(
'/facebook',
passport.authenticate('facebook')
);
router.get('/facebook/callback',
passport.authenticate(
'facebook',
{
failureRedirect: '/login',
failureFlash: true
}
),
(req, res) => {
// Successful authentication
res.redirect('/authenticated');
}
);
module.exports = router;