Files
Eventment-API/strategies/auth/facebook.js

77 lines
2.0 KiB
JavaScript

const passport = require('passport');
const FacebookStrategy = require('passport-facebook').Strategy;
const config = require('../../config');
const User = require('../../models/user');
module.exports = function(passport) {
passport.use('facebook', new FacebookStrategy(
{
clientID: config.services.facebook.appId,
clientSecret: config.services.facebook.appSecret,
callbackURL: 'http://localhost:3001/auth/facebook/loggedin',
profileFields: ['id', 'email', 'first_name', 'last_name', 'picture'],
},
(accessToken, refreshToken, profile, done) => {
const {
email,
first_name: firstName,
id: userId,
last_name: lastName,
picture: { data: { url = null } = {} } = {},
} = profile._json;
const avatar = url;
User.findOneAndUpdateOrCreate(
{
email,
},
{
accessToken,
associatedEmail: email,
method: profile.provider,
userId,
},
{
avatar,
email,
firstName,
lastName,
},
(err, user) => {
return done(err, user, { accessToken, refreshToken });
}
);
}
));
passport.use('facebookLink', new FacebookStrategy(
{
clientID: config.services.facebook.appId,
clientSecret: config.services.facebook.appSecret,
callbackURL: 'http://localhost:3001/auth/facebook/linked',
profileFields: ['id', 'email', 'first_name', 'last_name', 'picture'],
},
(accessToken, refreshToken, profile, done) => {
const {
email,
first_name: firstName,
id: userId,
last_name: lastName,
picture: { data: { url = null } = {} } = {},
} = profile._json;
const avatar = url;
const strategy = {
accessToken,
associatedEmail: email,
method: profile.provider,
userId,
};
return done(null, { avatar, strategy });
}
));
};