mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
UIWebView which aren't able to use the preferred "popup" login flow. See the specs for details: https://meteor.hackpad.com/OAuth-redirect-flow-spec-PeziTcaNPDP https://meteor.hackpad.com/OAuth-redirect-flow-part-II-vswwUKP4vXe I extracted code to construct a URL from the `http` package into a new `url` utility package. The new package has no public API, it simply has the original URL construction functions that were in `http` and makes them available to oauth. Fixes the Meetup account login, as Meetup now requires using "https://api.meetup.com/2/members" instead of "https://secure.meetup.com/2/members". The `?close` parameter for the redirect URI is now not needed or used. For backwards compatibility the `?close` parameter is included if the login service configuration doesn't include the `loginStyle` field (indicating it was created using old code).
47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
Facebook = {};
|
|
|
|
// Request Facebook credentials for the user
|
|
//
|
|
// @param options {optional}
|
|
// @param credentialRequestCompleteCallback {Function} Callback function to call on
|
|
// completion. Takes one argument, credentialToken on success, or Error on
|
|
// error.
|
|
Facebook.requestCredential = function (options, credentialRequestCompleteCallback) {
|
|
// support both (options, callback) and (callback).
|
|
if (!credentialRequestCompleteCallback && typeof options === 'function') {
|
|
credentialRequestCompleteCallback = options;
|
|
options = {};
|
|
}
|
|
|
|
var config = ServiceConfiguration.configurations.findOne({service: 'facebook'});
|
|
if (!config) {
|
|
credentialRequestCompleteCallback && credentialRequestCompleteCallback(
|
|
new ServiceConfiguration.ConfigError());
|
|
return;
|
|
}
|
|
|
|
var credentialToken = Random.secret();
|
|
var mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i.test(navigator.userAgent);
|
|
var display = mobile ? 'touch' : 'popup';
|
|
|
|
var scope = "email";
|
|
if (options && options.requestPermissions)
|
|
scope = options.requestPermissions.join(',');
|
|
|
|
var loginStyle = OAuth._loginStyle('facebook', config, options);
|
|
|
|
var loginUrl =
|
|
'https://www.facebook.com/dialog/oauth?client_id=' + config.appId +
|
|
'&redirect_uri=' + OAuth._redirectUri('facebook', config) +
|
|
'&display=' + display + '&scope=' + scope +
|
|
'&state=' + OAuth._stateParam(loginStyle, credentialToken);
|
|
|
|
OAuth.launchLogin({
|
|
loginService: "facebook",
|
|
loginStyle: loginStyle,
|
|
loginUrl: loginUrl,
|
|
credentialRequestCompleteCallback: credentialRequestCompleteCallback,
|
|
credentialToken: credentialToken
|
|
});
|
|
};
|