Configure Strategy

In the previous section, you registered the app with Facebook. In this section, you'll configure Passport with the information obtained during registration.

First, create a .env file to store the client ID and secret that were obtained from Facebook.

$ touch .env

Then, add the client ID and secret. The contents of .env should look as follows.

FACEBOOK_CLIENT_ID=__INSERT_CLIENT_ID_HERE__
FACEBOOK_CLIENT_SECRET=__INSERT_CLIENT_SECRET_HERE__

The client ID and secret obtained from Facebook should be inserted where noted.

Open routes/auth.js and add the following code at line 6 to configure the FacebookStrategy.

passport.use(new FacebookStrategy({
  clientID: process.env['FACEBOOK_CLIENT_ID'],
  clientSecret: process.env['FACEBOOK_CLIENT_SECRET'],
  callbackURL: '/oauth2/redirect/facebook',
  state: true
}, function verify(accessToken, refreshToken, profile, cb) {
  db.get('SELECT * FROM federated_credentials WHERE provider = ? AND subject = ?', [
    'https://www.facebook.com',
    profile.id
  ], function(err, row) {
    if (err) { return cb(err); }
    if (!row) {
      db.run('INSERT INTO users (name) VALUES (?)', [
        profile.displayName
      ], function(err) {
        if (err) { return cb(err); }
        
        var id = this.lastID;
        db.run('INSERT INTO federated_credentials (user_id, provider, subject) VALUES (?, ?, ?)', [
          id,
          'https://www.facebook.com',
          profile.id
        ], function(err) {
          if (err) { return cb(err); }
          var user = {
            id: id,
            name: profile.displayName
          };
          return cb(null, user);
        });
      });
    } else {
      db.get('SELECT * FROM users WHERE id = ?', [ row.user_id ], function(err, row) {
        if (err) { return cb(err); }
        if (!row) { return cb(null, false); }
        return cb(null, row);
      });
    }
  });
}));

This configures the FacebookStrategy to fetch the user record associated with the Facebook account. If a user record does not exist, one is created the first time someone signs in. In either case, the user is authenticated.

The strategy is now configured. Next you will add session support to the app in order to maintain state when redirecting to Facebook.

SEARCH FOR STRATEGIES

0STRATEGIES