Mock Passport.js strategies for testing and development
The following strategies are avaiable for mocking:
-
OAuth2Strategy
The OAuth2Strategy mocks any OAuth2 Passport lib that expect
req (optional), accessToken, refreshToken, profile, done
in verify callback. This strategy also mocks the callbackUrl redirect, but it can be easily disabled for mobile based strategies that do not require it, such as passport-facebook-token, passport-instagram-token and passport-github-token. -
GoogleTokenStrategy
The GoogleTokenStrategy mocks the passport-google-id-token strategy, that expect
req (optional), parsedToken, googleId, done
in verify callback.
npm install --save passport-mock-strategies
var OAuth2StrategyMock = require("passport-mock-strategies").OAuth2Strategy;
passport.use(
new OAuth2StrategyMock(
{
// Options
passReqToCallback: true,
passAuthentication: true
},
function verifyFunction(req, token, refreshToken, profile, done) {
/* You can mock you database fetch here */
var mock = {
id: 1,
"name": "John Doe",
"email": "[email protected]"
}
done(null, mock);
}
)
);
strategy._redirectToCallback = true;
strategy._callbackURL = "http://localhost:5000/mock/oauth2/callback";
strategy._profile = {
id: 1234,
provider: "facebook",
displayName: "John Doe",
emails: [{ value: "[email protected]" }],
photos: [
{
value: "https://via.placeholder.com/350x150"
}
]
};
// Main route
app.route('/mock/oauth2').get(
passport.authenticate('mock-oauth2', {
scope: ['profile', 'email']
})
)
// Callback route
app.get(
"/mock/oauth2/callback",
passport.authenticate("mock-oauth2"),
function(req, res) {
res.send(req.user);
}
);
var GoogleStrategyMock = require("passport-mock-strategies").GoogleTokenStrategy;
passport.use(
new GoogleStrategyMock(
{
passReqToCallback: true,
passAuthentication: true
},
function verifyFunction(req, parsedToken, googleId, done) {
done(null, googleId);
}
)
);
strategy._parsedToken = "abc";
strategy._googleId = "def";
app.get(
"/mock/google",
passport.authenticate("mock-google-token", {
session: false
}),
function(req, res) {
res.send(req.user);
}
);