Created
November 7, 2017 12:01
-
-
Save cravindra/4c66f6a390784dfec5f5050ef8de3edf to your computer and use it in GitHub Desktop.
Simple wrapper which uses lasso-loader to enable facebook oauth asynchronously
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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