Search code examples
node.jsreactjsreact-nativepassport.jspassport-facebook

How to Pass Data from React Native to Passport.js FacebookTokenStrategy Callback?


I'm trying to pass data like deviceID to Passport.js FacebookTokenStrategy callback.

I tried using req._toParam, but it is not working, seems like it's deprecated.

server router file

authRouter.post(
    '/facebook/token',
      (req, res, next) => {
        req._toParam = req.user.uniqueDeviceID;
        passport.authenticate('facebook-token')(req, res, next)
      },
      (req, res) => {
        res.send(req.user);
      }
  );

server passport strategy file

passport.use(
    new FacebookTokenStrategy(
        {
            clientID: keys.facebookAppID,
            clientSecret: keys.facebookAppSecret
        },
        async (req, accessToken, refreshToken, profile, done) => {  
                 console.log(req._toParam); 
                 //how to pass react-native-device-info deviceID to this callback?
              }
       )
)

react native client side

const res = await server.post(`/auth/facebook/token?access_token=${tokenData.accessToken}&uniqueDeviceID=${DeviceInfo.getUniqueId()}`);            

any help would be greatly appreciated.


Solution

  • I solved it by adding passReqToCallback: true in FacebookTokenStrategy to pass the request to strategy callback and using req.query to retrieve the query string data uniqueDeviceID=${DeviceInfo.getUniqueId()}.

    passport.use(
        new FacebookTokenStrategy(
            {
                clientID: keys.facebookAppID,
                clientSecret: keys.facebookAppSecret,
                passReqToCallback: true
            },
            async (req, accessToken, refreshToken, profile, done) => {  
                     console.log(req.query.uniqueDeviceID);
            }
        )
    );
    

    Thus skipping the need to forward request from router to strategy callback.

    authRouter.post(
        '/facebook/token',     
        passport.authenticate('facebook-token'),
          (req, res) => {
            res.send(req.user);
          }
      );