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.
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);
}
);