Skip to content

Instantly share code, notes, and snippets.

@cravindra
Created November 7, 2017 12:01
Show Gist options
  • Save cravindra/4c66f6a390784dfec5f5050ef8de3edf to your computer and use it in GitHub Desktop.
Save cravindra/4c66f6a390784dfec5f5050ef8de3edf to your computer and use it in GitHub Desktop.
Simple wrapper which uses lasso-loader to enable facebook oauth asynchronously
const lassoLoader = require('lasso-loader');
/* globals FB, _sdk */
/**
* Performs a one time OAuth 2.0 authorization.
* Depending on the parameters used, this will open a popup to the Google sign-in flow
* or try to load the requested response silently, without user interaction.
*/
function authenticate() {
return new Promise(function (resolve, reject) {
lassoLoader.load({
js: [
'https://connect.facebook.net/en_US/sdk.js'
]
}, function () {
if (!FB) {
let err = new Error('Facebook sdk is not instantiated');
_sdk.slError(err, 'error');
err.message = 'session.fbAuthFailed';
return reject(err);
}
if (!(_sdk && _sdk.config && _sdk.config.oauth && _sdk.config.oauth.facebook)) {
let err = new Error('Global namespace _sdk is not instantiated');
_sdk.slError(err, 'error');
err.message = 'error.general';
return reject(err);
}
/*
* Initialize the FB SDK
* https://developers.facebook.com/docs/javascript/reference/FB.init/v2.10
*/
FB.init(_sdk.config.oauth.facebook);
/*
* Get login status and login if needed
* https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus
*/
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
/*
* the user is logged in and has authenticated your
* app, and response.authResponse supplies
* the user's ID, a valid access token, a signed
* request, and the time the access token
* and signed request each expire
* let uid = response.authResponse.userID;
* let accessToken = response.authResponse.accessToken;
*/
resolve({
'provider': 'facebook',
'token': response.authResponse.accessToken
});
} else {
/*
* The user isn't logged in to Facebook, attempt login
* https://developers.facebook.com/docs/reference/javascript/FB.login/v2.10
*/
FB.login(function (response) {
if (response.authResponse) {
resolve({
'provider': 'facebook',
'token': response.authResponse.accessToken
});
} else {
let err = new Error('session.popupClosed');
_sdk.slError(err, 'warn');
return reject(err);
}
});
}
});
});
});
}
module.exports = {
authenticate
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment