为了在Parse服务器上执行特定请求,我需要使用主密钥。
我尝试初始化它,但似乎我做不到正确的方法,因为我仍然遇到此错误: ERROR错误:未捕获(承诺):错误:无法使用主密钥,它具有没有提供。
这是我的代码:
Parse.initialize('myAppId', '', 'myMasterKey'); // appID, js key & master key
(Parse as any).serverURL = 'https://myServerUrl';
问题可能是由于js密钥在参数中为空(我的项目仅使用万能密钥)。任何帮助都将受到欢迎...
答案 0 :(得分:1)
根据您的问题,我想这是客户端上的Angular。在这种情况下,您不想使用主密钥。如果要加载您的页面,我将能够获取您的主键并查看解析服务器的url,并且能够使用解析服务器的其余api读取任何数据。我将能够创建或删除任何想要的数据。
解决此问题的方法是在服务器上使用cloud code。因此,例如,如果您想允许“用户a”向“用户b”发送电子邮件,则您将无法在客户端上进行处理,因为如果没有主密钥,就无法获得“用户” b将电子邮件发送给用户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' });
此模式允许您执行特权操作,例如获取用户的电子邮件,而不会向加载页面的任何人透露您的主密钥。
答案 1 :(得分:-1)
我确实设法找到了解决方案。 我终于没有将万能钥匙放在初始化中:
Parse.initialize('myAppId', ''); // appID, js key
(Parse as any).serverURL = 'https://myServerUrl'; // use your server url
(Parse as any).masterKey = 'myMasterkey';