From c03dae933f42c4d32555803e9178fd4f34082d6e Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 28 Apr 2019 02:11:38 -0400 Subject: [PATCH] feat: facebook auth module --- client/components/admin/admin-auth.vue | 12 +++++++--- .../authentication/facebook/authentication.js | 23 +++++++++++++------ .../authentication/facebook/definition.yml | 12 ++++++---- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/client/components/admin/admin-auth.vue b/client/components/admin/admin-auth.vue index 79fd0d3d..429505b0 100644 --- a/client/components/admin/admin-auth.vue +++ b/client/components/admin/admin-auth.vue @@ -23,7 +23,8 @@ v-list-tile(:key='str.key', @click='selectedStrategy = str.key', :disabled='!str.isAvailable') v-list-tile-avatar v-icon(color='grey', v-if='!str.isAvailable') indeterminate_check_box - v-icon(color='primary', v-else-if='str.isEnabled', v-ripple, @click='str.key !== `local` && (str.isEnabled = false)') check_box + v-icon(color='primary', v-else-if='str.isEnabled && str.key !== `local`', v-ripple, @click='str.isEnabled = false') check_box + v-icon(color='primary', v-else-if='str.isEnabled && str.key === `local`') check_box v-icon(color='grey', v-else, v-ripple, @click='str.isEnabled = true') check_box_outline_blank v-list-tile-content v-list-tile-title.body-2(:class='!str.isAvailable ? `grey--text` : (selectedStrategy === str.key ? `primary--text` : ``)') {{ str.title }} @@ -72,8 +73,13 @@ img(:src='strategy.logo', :alt='strategy.title') .caption.pt-3 {{strategy.description}} .caption.pb-3: a(:href='strategy.website') {{strategy.website}} - .body-2(v-if='strategy.isEnabled') This strategy is #[v-chip(color='green', small, dark, label) active] - .body-2(v-else) This strategy is #[v-chip(color='red', small, dark, label) not active] + .body-2(v-if='strategy.isEnabled') + span This strategy is + v-chip(color='green', small, dark, label) active + span(v-if='selectedStrategy === `local`') and cannot be disabled. + .body-2(v-else) + span This strategy is + v-chip(color='red', small, dark, label) not active v-divider.mt-3 v-subheader.pl-0 Strategy Configuration .body-1.ml-3(v-if='!strategy.config || strategy.config.length < 1'): em This strategy has no configuration options you can modify. diff --git a/server/modules/authentication/facebook/authentication.js b/server/modules/authentication/facebook/authentication.js index 7e467c93..af37652e 100644 --- a/server/modules/authentication/facebook/authentication.js +++ b/server/modules/authentication/facebook/authentication.js @@ -5,6 +5,7 @@ // ------------------------------------ const FacebookStrategy = require('passport-facebook').Strategy +const _ = require('lodash') module.exports = { init (passport, conf) { @@ -13,13 +14,21 @@ module.exports = { clientID: conf.clientId, clientSecret: conf.clientSecret, callbackURL: conf.callbackURL, - profileFields: ['id', 'displayName', 'email'] - }, function (accessToken, refreshToken, profile, cb) { - WIKI.models.users.processProfile(profile).then((user) => { - return cb(null, user) || true - }).catch((err) => { - return cb(err, null) || true - }) + profileFields: ['id', 'displayName', 'email', 'photos'], + authType: 'reauthenticate' + }, async (accessToken, refreshToken, profile, cb) => { + try { + const user = await WIKI.models.users.processProfile({ + profile: { + ...profile, + picture: _.get(profile, 'photos[0].value', '') + }, + providerKey: 'facebook' + }) + cb(null, user) + } catch (err) { + cb(err, null) + } } )) } diff --git a/server/modules/authentication/facebook/definition.yml b/server/modules/authentication/facebook/definition.yml index 20bb9fbe..90bd7e20 100644 --- a/server/modules/authentication/facebook/definition.yml +++ b/server/modules/authentication/facebook/definition.yml @@ -5,16 +5,18 @@ author: requarks.io logo: https://static.requarks.io/logo/facebook.svg color: indigo website: https://facebook.com/ -isAvailable: false +isAvailable: true useForm: false +scopes: + - email props: clientId: type: String - title: Client ID - hint: Application Client ID + title: App ID + hint: Application ID order: 1 clientSecret: type: String - title: Client Secret - hint: Application Client Secret + title: App Secret + hint: Application Secret order: 2