Meteor 的accounts-facebook
软件包很容易设置。要输入 Facebook 应用程序 ID 和秘密令牌,我在浏览器中加载了我的流星网络应用程序,然后单击登录按钮,然后单击“配置 Facebook”,它要求我输入应用程序 ID 和秘密令牌等配置值。
现在我想改变它们,但不知道它们的存储位置。我没有在我的流星应用程序目录或子目录的任何文件中看到它们,也没有在任何地方的数据库中看到它们。
配置数据存储在 mongodb 中。
如果你加载
meteor mongo
然后使用db.meteor_accounts_loginServiceConfiguration.find()
你应该看到你的配置数据
你也可以更新!如果你回来了
{ "service" : "x", "appId" : "x", "secret" : "x", "_id" : "abc" }`
在同一个 mongo shell 中:
db.meteor_accounts_loginServiceConfiguration.update({_id:'abc'},
{$set:{"appId" : <new app id>, "secret" : <new secret>}});
(使用_id
您要编辑的服务配置中的字段。
在 Meteor 中,您可以使用它来代替:
ServiceConfiguration.configurations.update({
service:"facebook"
}, {
$set: {
<new params>
}
});
请注意,要在流星中执行此操作,您需要将此包添加到:
meteor add service-configuration
为了详细说明 Kristoffer 的回答,这里是如何在运行时配置应用程序
/server/boot.js
configureFacebook = function(config) {
// first, remove configuration entry in case service is already configured
ServiceConfiguration.configurations.remove({
service: "facebook"
});
ServiceConfiguration.configurations.insert({
service: "facebook",
appId: config.clientId,
secret: config.secret
});
};
// set the settings object with meteor --settings private/settings-local.json
var facebookConfig = Meteor.settings.facebook;
if(facebookConfig) {
console.log('Got settings for facebook', facebookConfig)
configureFacebook(facebookConfig);
}
这与一些在本地和生产环境中使用的设置文件结合使用:
/private/local-settings.json
{
"facebook" : {
"clientId": "330foobar",
"secret": "52e1e247a5a1234klasdf087vasdff07"
}
}
为了在本地开发,我只是meteor --settings private/local-settings.json
将 facebook 的生产设置部署到我做的生产服务器上meteor deploy --settings private/prod-settings.json
。
这个怎么样:
Accounts.loginServiceConfiguration.insert({
service: "facebook",
appId: "1292962797",
secret: "75a730b58f5691de5522789070c319bc"
});
在这里找到:http: //docs.meteor.com/#meteor_loginwithexternalservice
这将简单地在启动时删除所有服务并根据您的 settings.json (meteor --settings settings.json) Coffee-script 等效项重新插入它们:
@privateSettings = Meteor.settings.private
for s in privateSettings.services
ServiceConfiguration.configurations.remove service: s.service
ServiceConfiguration.configurations.insert s
存储在 settings.json 中的设置:
{
"private": {
"services": [{
"service": "google",
"clientId": "yourappid.apps.googleusercontent.com",
"secret": "yoursecret"
},{
"service": "twitter",
"consumerKey": "yourconsumerkey",
"secret": "yoursecret"
},{
"service": "facebook",
"appId": "yourappid",
"secret": "yoursecret"
}],
}
}
如果您的应用程序中还没有太多数据,只需运行:
meteor reset
这将清除应用程序的所有 Mongo 数据。
[注意:对于 Meteor >= 1.2.2]
官方 Meteor 文档在这里解释了如何做到这一点。
添加service-configuration
包(否则不能使用ServiceConfiguration
):
$ meteor add service-configuration
然后你可以把它放在Meteor.startup
:
Meteor.startup(function () {
// Set Facebook app configurations
ServiceConfiguration.configurations.upsert({
service: "facebook"
}, {
$set: {
appId: 'YOUR_APP_ID',
secret: 'YOUR_APP_SECRET'
}
});
return;
});
在 settings.json 中外部化 Facebook 配置
也许最终的解决方案是将 Facebook 应用程序的配置放在设置文件中
/settings.json
像这样:
{
"facebook" : {
"appId": "APP_ID",
"secret": "APP_SECRET"
}
}
然后你必须启动你的 Meteor 应用程序
$ meteor --settings settings.json
为了加载设置文件。
Meteor.startup
最后,您可以从设置文件中加载 Facebook 配置:
Meteor.startup(function () {
// Load and set Facebook app configurations
var facebookConfig = Meteor.settings.facebook;
ServiceConfiguration.configurations.upsert({
service: "facebook"
}, {
$set: {
appId: facebookConfig.appId,
secret: facebookConfig.secret
}
});
return;
});