Meteor account-facebook не имеет возможности использовать https для redirect_uri - PullRequest
0 голосов
/ 03 мая 2018

Я использую метеор account-facebook и хочу использовать его с SSL в соответствии с требованиями Facebook, но redirect_uri передается как http://, даже если приложение работает на https:// , Код, который создает loginUrl в facebook-oauth.js , выглядит следующим образом:

var loginUrl =
        'https://www.facebook.com/v2.9/dialog/oauth?client_id=' + config.appId +
        '&redirect_uri=' + OAuth._redirectUri('facebook', config) +
        '&display=' + display + '&scope=' + scope +
        '&state=' + OAuth._stateParam(loginStyle, credentialToken, options && options.redirectUrl);

Что снова вызывает OAuth :

OAuth._redirectUri = function (serviceName, config, params, absoluteUrlOptions) {
  ...
  Meteor.absoluteUrl('_oauth/' + serviceName, absoluteUrlOptions)
  ...
}

Там в Meteor.absoluteUrl SSL сначала удаляется перед чтением, если Meteor.absoluteUrl.defaultOptions.secure истинно:

  // merge options with defaults
  options = Object.assign({}, Meteor.absoluteUrl.defaultOptions, options || {});
  ...
  if (!/^http[s]?:\/\//i.test(url)) // url starts with 'http://' or 'https://'
    url = 'http://' + url; // we will later fix to https if options.secure is set
  ...
  // turn http to https if secure option is set, and we're not talking
  // to localhost.
  if (options.secure &&
      /^http:/.test(url) && // url starts with 'http:'
      !/http:\/\/localhost[:\/]/.test(url) && // doesn't match localhost
      !/http:\/\/127\.0\.0\.1[:\/]/.test(url)) // or 127.0.0.1
    url = url.replace(/^http:/, 'https:');

Я не вижу пути:

  1. Как указать account-facebook использовать правильный протокол, поскольку параметр absoluteUrlOptions не передается в OAuth._redirectUri
  2. Как установить Meteor.absoluteUrl.defaultOptions.secure
  3. Любая другая опция ...

Мой единственный обходной путь должен был установить meteor add force-ssl, поэтому все приложение принудительно работает по https.

1 Ответ

0 голосов
/ 03 мая 2018

A Временное решение - установить force-ssl, чтобы все приложение работало по протоколу https.

meteor add force-ssl 

Обновление: очевидно, вы также можете просто установить Meteor.absoluteUrl.defaultOptions.secure = true в нужном месте в начале вашего приложения, например, client/lib/...

...