如何在 settings.json 中将 Amazon 凭据与 Facebook 凭据结合起来

How to combine Amazon credentials with Facebook credentials in settings.json

我正在尝试以正确的方式设置我的 settings.json 文件,但我似乎无法让它工作。

我目前将我的 Amazon S3 凭据保存在文件中,但是当我想添加微博或 FB 凭据时,我的应用程序总是崩溃。

添加多个服务的正确方法是什么?

目前看起来是这样的:

{
 "AWSAccessKeyId": "Amazon key",
 "AWSSecretAccessKey": "Amazon secret"
}

我需要添加以下内容:

ServiceConfiguration.configurations.upsert(
  { service: "weibo" },
  {
    $set: {
      clientId: "1292962797",
      loginStyle: "popup",
      secret: "75a730b58f5691de5522789070c319bc"
    }
  }
);

FB 凭据也是如此。将所有这些合并到一个文件中的正确方法是什么?

当我按照下面的建议设置文件时,出现此错误:错误:匹配错误:缺少密钥 'AWSAccessKeyId'

这是我目前的 settings.json 设置:

{
  "public": {

  },
  "private": {
    "facebook": {
      "appId": "FBId",
      "secret": "FBsecret"
    },
    "weibo": {
      "clientId": "WeiboId",
      "secret": "WeiboSecret"
    },
    "aws": {
      "bucket": "ec2016",
      "AWSAccessKeyId": "S3Id",
      "AWSSecretAccessKey": "S3Secret",
      "region": "eu-central-1"
    }
  }
}

更新:

根据我在这里收到的帮助,我在服务器上设置了我的 setting.json 文件和另一个名为 configure-services 的文件。看起来像这样。修正错别字后(呃......)现在一切正常!非常感谢!

const p = Meteor.settings.private;

const faceAppId = p.facebook.appId;
const faceSecret = p.facebook.secret;

const S3KeyId = p.aws.key;
const S3AccessKey = p.aws.secret;

ServiceConfiguration.configurations.upsert({
  service: 'facebook'
}, {
  $set: {
    service: 'facebook',
    appId: faceAppId,
    secret: faceSecret,
  },
});

Slingshot.fileRestrictions("myImageUpload", {
  allowedFileTypes: ["image/png", "image/jpeg", "image/gif", "video/mp4", "video/avi", ],
  maxSize: 10 * 1024 * 1024, // 10 MB (use null for unlimited)
});

Slingshot.createDirective('myImageUpload', Slingshot.S3Storage, {
  bucket: p.aws.bucket,
  region: p.aws.region,
  AWSAccessKeyId: S3KeyId,
  AWSSecretAccessKey: S3AccessKey,
  acl: 'public-read',

  authorize: function () {
    //Deny uploads if user is not logged in.
    if (!this.userId) {
      var message = "Please login before posting files";
      throw new Meteor.Error("Login Required", message);
    }
    return true;
  },

  key: function (file) {
    //Store file into a directory by the user's username.
    var user = Meteor.users.findOne(this.userId);
    return user.username + "/" + file.name;
  }
});

这是我通常用于 settings.json 文件的格式:

{
  "public": {

  },
  "private": {
    "facebook": {
      "namespace": "",
      "appId": "",
      "secret": ""
    },
    "google": {
      "clientId": "",
      "secret": ""
    },
    "aws": {
      "bucket": "",
      "key": "",
      "secret": "",
      "region": ""
    }
  }
}

然后按如下方式使用它们:

const p = Meteor.settings.private;

const faceAppId = p.facebook.appId;
const faceSecret = p.facebook.secret;

const ggClientId = p.google.clientId;
const ggSecret = p.google.secret;

ServiceConfiguration.configurations.upsert({
  service: 'facebook'
}, {
  $set: {
    service: 'facebook',
    appId: faceAppId,
    secret: faceSecret,
  }
});


ServiceConfiguration.configurations.upsert({
  service: 'google'
}, {
  $set: {
    service: 'google',
    clientId: ggClientId,
    secret: ggSecret,
  }
});

Slingshot.createDirective('imageUpload', Slingshot.S3Storage, {
  bucket: p.aws.bucket,
  region: p.aws.region,
  AWSAccessKeyId: p.aws.key,
  AWSSecretAccessKey: p.aws.secret,
  acl: 'public-read',
  maxSize: 20 * 1024 * 1024,
  allowedFileTypes: ['image/png', 'image/jpeg', 'image/gif'],
  authorize: function() {
    // ...
  },
  key: function() {
    // ...
  }
});