首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor:插入失败:访问被拒绝。没有允许对方法“”insert“”的受限集合设置验证器“”

Meteor:插入失败:访问被拒绝。没有允许对方法“”insert“”的受限集合设置验证器“”
EN

Stack Overflow用户
提问于 2019-08-10 22:51:06
回答 3查看 363关注 0票数 0

你好,我正在做一个Meteor-React项目,这是一个相当新的项目。我正在尝试将新对象插入到现有的集合中,但如标题所示,它显示错误。

这是我的组件,负责在UI级别插入新项。

代码语言:javascript
复制
import React, { useState, useEffect } from "react";
import newTask from '../api/create'

export default Create = () => {
  const [task, createTask] = useState('');
  handleKeyPress = (event) => {
    if(event.key === 'Enter'){
      newTask(task)
    }
}
return (
<form className="add-task" noValidate="">
  <div>
    <div className="fieldset add-task-input fieldset-stripped">
      <div className="fieldset-content">
        <label className="fieldset-label">
          <span className="fieldset-label-content has-icon">
            <i className="icon-plus" />
          </span>
          <input
            className=""
            name="title"
            placeholder="Add new task"
            type="text"
            autoComplete="off"
            value={task}
            onChange={(e) => { createTask(e.target.value)}}
            onKeyPress={this.handleKeyPress}
          />
        </label>
       </div>
     </div>
   </div>
  </form>
 )
}

这是我尝试导出并导入到上面的组件文件中的方法。

代码语言:javascript
复制
import { Tasks } from '../../tasks';

export default newTask = (taskTitle) => Tasks.insert({
  title: taskTitle,
  dueDate: null,
  repeat: {},
  color: '#4e42c3',
  status: 'incomplete',
  customFields: []
})

我尝试使用其他人提出的方法,如下所示,将下面的代码添加到上面的方法文件中:

代码语言:javascript
复制
Tasks.allow({
  insert: function () {
    return true;
  }
})

但它仍然不能工作,并显示相同的错误。你知道如何在Mongo集合中插入新项目吗?

EN

回答 3

Stack Overflow用户

发布于 2019-08-11 20:56:52

允许/拒绝正在打开security vulnerability。您可能只将其用于原型设计/模拟一些初始软件原型。

更新集合的正确方法是使用Meteor methods

服务器

代码语言:javascript
复制
import { Tasks } from '../path/to/tasks'

Meteor.methods({
  'insertTask': function ({ title, dueDate, repeat, color, status, customFields }) {
    return Tasks.insert({ title, dueDate, repeat, color, status, customFields })
  }
})

客户端

代码语言:javascript
复制
import { Tasks } from '../../tasks';

export default newTask = (taskTitle) => Meteor.call('insertTask', {
  title: taskTitle,
  dueDate: null,
  repeat: {},
  color: '#4e42c3',
  status: 'incomplete',
  customFields: []
})

编辑:如果您只想在UI级别插入文档,并且从不在服务器上存储集合,则可以通过导出Task集合使其成为本地集合,而不使用名称:

客户端

代码语言:javascript
复制
export const Tasks = new Mongo.Collection(null)
票数 1
EN

Stack Overflow用户

发布于 2019-08-10 23:23:56

你使用的是autopublish包吗?您正在尝试从客户端插入对象。没有autopublish包,你无法做到这一点。从服务器端添加autopublish或插入。

票数 0
EN

Stack Overflow用户

发布于 2019-08-11 17:25:28

所以在前面我添加了下面的代码

代码语言:javascript
复制
Tasks.allow({
  insert: function () {
    return true;
  }
})

在客户端。一旦我把它移到服务器端,它就解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57443168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档