Я реализовал log in with facebook
, используя passport.js.Но иногда, когда я пытаюсь войти в систему, это выдает мне эту ошибку -
FacebookTokenError: This authorisation code has been used
Но факт в том, что это слишком случайно.Иногда это работает отлично.Иногда выдает эту ошибку .Я уже испробовал все решения, представленные в сообщениях SO.Ни один из них не работает.
Я использую реагирование в качестве внешнего интерфейса, а node.js - в качестве внутреннего.Для промежуточного программного обеспечения сеанса с использованием экспресс-сеанса.
Вот код, который я использовал для реализации log in with facebook
import passport from 'passport';
import { Strategy } from 'passport-facebook';
const { FACEBOOK_APP_ID, FACEBOOK_APP_SECRET, API_URL } = process.env;
export default (app) => {
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser((user, cb) => cb(null, user));
passport.deserializeUser((obj, cb) => cb(null, obj));
passport.use(new Strategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: `${API_URL}facebook/callback`,
profileFields: ['id', 'displayName', 'email', 'name', 'photos'],
passReqToCallback: true,
enableProof: true,
}, async (req, accessToken, refreshToken, profile, cb) => {
try {
const email = (profile.emails && profile.emails[0].value) || '';
const { displayName } = profile;
const users = await Users.findOrCreate({
where: { email },
defaults: { name: displayName },
}).catch((err) => {
console.log(err);
});
if (users.length) {
req.session.userId = users[0].get('id');
return cb(null, users[0]);
}
} catch (err) {
console.log('error during fb: ', err);
}
return cb('error in facebook');
}));
app.use('/facebook', passport.authenticate('facebook', { session: false, scope: ['public_profile', 'email'] }));
app.use('/facebook/callback', passport.authenticate('facebook', { session: false, failureRedirect: `${FRONTEND_HOST}` }), (_, res) => {
res.redirect(`${FRONTEND_HOST}`);
});
};
Это полная ошибка, которую я получаю -