如何使用主密钥初始化 Parse 服务器的 SDK [Angular 7]

How to initialize the SDK of the Parse server with master key [Angular 7]

为了在 Parse 服务器上执行特定请求,我需要使用主密钥。

我试图初始化它,但似乎我没有以正确的方式进行,因为我仍然有这个错误:错误错误:未捕获(在承诺中):错误:无法使用主机key,还没有提供

这是我的代码:

Parse.initialize('myAppId', '', 'myMasterKey');  // appID, js key & master key
(Parse as any).serverURL = 'https://myServerUrl';

可能是因为params中的js key为空(我的项目只用了一个masterkey)。欢迎任何帮助...

我确实设法找到了解决方案。 我终于没有把万能钥匙放在初始化中了:

Parse.initialize('myAppId', ''); // appID, js key
(Parse as any).serverURL = 'https://myServerUrl'; // use your server url
(Parse as any).masterKey = 'myMasterkey';

根据你的问题,我猜测这是在客户端的 Angular 中。在这种情况下,您不想使用主密钥。如果我要加载你的页面,我将能够获取你的主密钥并查看你的解析服务器的 url 并且我将能够使用你的解析服务器的其余 api 读取任何数据.我将能够创建或删除我想要的任何数据。

解决这个问题的方法是在你的服务器上使用cloud code。因此,例如,如果你想让 'user a' 发送电子邮件给 'user b',你将无法在客户端执行此操作,因为没有主密钥,就无法获取'user b's 发送到用户 a 的客户端的电子邮件。

因此,您创建了一个接受两个参数的云函数 sendEmail:要发送电子邮件的用户 ID 和要发送的消息。未经测试的代码看起来像这样:

const sendEmail = async function sendEmail(request) {
   const { user: sender } = request;
   const { id, message } = request.params;
   const recipient = await Parse.Query(Parse.User).get(id, { useMasterKey: true });
   console.log(recipient.get('email')); // now we have the user's email!
   ..... // code to actually send email here...
}

Parse.Cloud.define('sendEmail', sendEmail);

然后您可以从前端调用它,例如:

Parse.Cloud.run('sendEmail', { id: 'objectId', message: 'hi' });

此模式允许您执行特权操作,例如获取用户的电子邮件,而无需向加载您页面的任何人透露您的主密钥。