Passport Facebook Login Error: It looks like this app isn't available using Nodejs, Express and Mongodb

48 views Asked by At

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

0

There are 0 answers