I have been trying to implement Facebook Login Business for an application. Goal is to be able to access Instagram Graph API. However I keep encountering the error "It looks like this app isn't available" from Facebook while trying to login with a developer account. I used guidelines from passport documentation https://www.passportjs.org/packages/passport-facebook/
This is my Implementation.
I created a separate file called facebook-auth.
const passport = require('passport');
const FacebookStrategy = require('passport-facebook').Strategy;
const express = require('express');
const User = require('../models/user.model');
const router = express.Router();
require('dotenv').config();
passport.use(
new FacebookStrategy(
{
clientID: process.env.FACEBOOK_CLIENT_ID,
clientSecret: process.env.FACEBOOK_SECRET_KEY,
callbackURL: process.env.FACEBOOK_CALLBACK_URL,
},
async function (accessToken, refreshToken, profile, cb) {
const user = await User.findOne({
accountId: profile.id,
provider: 'facebook',
});
if (!user) {
console.log('Adding new facebook user to DB..');
const newUser = new User({
AccountId: profile.id,
FullName: profile.displayName,
Provider: profile.provider,
});
await newUser.save();
return cb(null, profile);
} else {
console.log('Facebook User already exists in DB..');
return cb(null, profile);
}
}
)
);
const authenticateFacebook = () => {
return passport.authenticate('facebook', { scope: 'email' });
};
const handleFacebookCallback = () => {
return passport.authenticate('facebook', {
failureRedirect: '/auth/facebook/error',
});
};
const redirectToSuccess = async (req, res) => {
const userInfo = {
id: req.session.passport.user.id,
displayName: req.session.passport.user.displayName,
provider: req.session.passport.user.provider,
};
res.status(200).send({ user: userInfo });
};
const handleFacebookError = (req, res) => {
res.send('Error logging in via Facebook..');
};
const signOut = (req, res) => {
try {
req.session.destroy(function (err) {
console.log('session destroyed.');
});
res.status(200).send({ message: 'User signed out successfully' });
} catch (err) {
res.status(400).send({ message: 'Failed to sign out fb user' });
}
};
module.exports = {
authenticateFacebook,
handleFacebookCallback,
redirectToSuccess,
handleFacebookError,
signOut,
};
Then I imported the functions in my user routes file
router.get("/auth/facebook/login", authenticateFacebook())
router.get("auth/facebook/callback", handleFacebookCallback(), (req, res) => { res.redirect('/auth/facebook/success'); })
router.get("/auth/facebook/success", redirectToSuccess)
router.get("/auth/facebook/error", handleFacebookError)
router.get("/signout", signOut)
I have tried creating to find out if it's an app issue but it isn't. Keep getting same error.
I have added the url to allowed routes on Facebook Login Settings.
I have also added the domain to allowed domain in App setting