ultimate
Version:
Dependency library for `ultimate-seed`.
61 lines (50 loc) • 1.48 kB
JavaScript
/*
* ultimate.server.middleware.passport.facebook
*/
;
var _ = require('lodash'),
passport = require('passport'),
passportFacebook = require('passport-facebook');
var _app = null;
/**
* Attach Facebook strategy.
*
* @private
* @param {object} facebookConfig Facebook config object.
* @param {string} baseUrl Base URL.
* @return {undefined}
*/
function _attachStrategy(facebookConfig, baseUrl) {
if (!_.isString(facebookConfig.appId)) {
throw new Error('Missing string in config: api.facebook.appId');
}
if (!_.isString(facebookConfig.appSecret)) {
throw new Error('Missing string in config: api.facebook.appSecret');
}
passport.use(new passportFacebook.Strategy({
clientID: facebookConfig.appId,
clientSecret: facebookConfig.appSecret,
callbackURL: baseUrl + '/auth/facebook/callback'
}, function (accessToken, refreshToken, profile, done) {
_app.models.User.findOrCreateFacebook(accessToken, refreshToken, profile, function (err, user) {
return done(null, user);
});
}));
}
/**
* Attach passport middleware.
*
* @param {App} app Application.
* @return {undefined}
*/
function attach(app) {
_app = app;
if (!_.isObject(app.config) ||
!_.isObject(app.config.api) ||
!_.isObject(app.config.api.facebook)) {
throw new Error('Missing string in config: api.facebook');
}
_attachStrategy(_app.config.api.facebook, _app.config.url);
}
// Public API
exports.attach = attach;