2016-02-23 159 views
1

此流星應用程序已刪除不安全和自動發佈,並添加了帳戶密碼。
它使用Accounts.createUser({username: someName, password: somePwrd});它可以在mongo提示符上進行驗證。失敗:拒絕訪問流星集合

我試圖Tasks1.insert(params);並得到拒絕訪問

我不知道爲什麼會得到拒絕訪問更新和插入的瀏覽器控制檯上。請告訴我爲什麼以及如何解決它?謝謝

//both.js 
Tasks1 = new Mongo.Collection('tasks1'); 
///////////////////////////////////////////////////// 

//server.js 
Meteor.publish('tasks1', function(){ 
    return Tasks1.find({userId: this.userId}); 
}); 

Meteor.methods({ 
    logMeIn: function(credentials) { 
    var idPin = credentials[0] + credentials[1]; 
    Accounts.createUser({username: idPin, password: credentials[1]}); 
    } 
}); 

Meteor.users.allow({ 
    insert: function (userId, doc) { 
    console.log(userId); 
    //var u = Meteor.users.findOne({_id:userId}); 
    return true; 
} 
}); 
///////////////////////////////////////////////////// 

//client.js 
Template.login.events({ 
    'click #logMe': function() { 
    var credentials = [$('#id').val(), $('#pin').val()]; 
    Meteor.call('logMeIn', credentials, function(err, result) { 
    if (result) { 
     console.log('logged in!'); 
    } 
    }); 
} 
}); 
Template.footer.events({ 
    'click button': function() { 
    if (this.text === "SUBMIT") { 
     var inputs = document.getElementsByTagName('input'); 
     for (var i = 0; i < inputs.length; i++) { 
     var params = {}; 
     params[inputs[i].name] = inputs[i].value; 
     Tasks1.insert(params); //<<<<<<---------------------- 
    } 
    } 
} 
}); 
+0

這些文件是否也在適當的目錄(服務器/客戶端等)?你是否真的將用戶的密碼作爲用戶名的一部分以明文形式存儲在數據庫中? – MasterAM

+0

這兩個問題都可以:) –

+0

server.js文件相對於項目根目錄的路徑是什麼? – MasterAM

回答

3

更新: 既然你已經修改了你的問題,並補充說Tasks1.insert(params);越來越拒絕訪問的消息,你應該Tasks集合添加allow規則,而不是Meteor.users集合。

Tasks.allow({ 
    insert: function (userId, doc) { 
      return true; 
     } 
    } 
    update: function (userId, doc, fieldNames, modifier) { 
      return true; 
     } 
    } 
    remove: function (userId, doc) { 
      return true; 
     } 
    } 
}); 

如果Accounts.createUser工作不allow規則上Meteor.users那麼請刪除它們,因爲它可能會允許用戶插入/從客戶端本身刪除他人。

更新結束。

由於您刪除了insecure,因此您需要添加allow/deny規則來插入,更新或刪除集合中的文件。

Meteor.users.allow({ 
    insert: function (userId, doc) { 
      //Normally I would check if (this.userId) to see if the method is called by logged in user or guest 
      //you can also add some checks here like user role based check etc., 
      return true; 
     } 
    } 
    update: function (userId, doc, fieldNames, modifier) { 
      //similar checks like insert 
      return true; 
     } 
    } 
    remove: function (userId, doc) { 
      //similar checks like insert 
      return true; 
     } 
    } 
}); 

查看API documentation瞭解更多詳情。

0

定義這樣的Meteor.methods將定義它爲服務器和客戶端。這意味着你將嘗試創建一個用戶TWICE,一次在服務器上(工作的),另一次在客戶端上。客戶端無權插入用戶文檔,因此您收到此錯誤。

有兩個選項供您:

1:只能由if(Meteor.isServer)圍繞着它或將它命名爲「服務器」

2文件夾中定義服務器上的方法:離開它是,它不會造成傷害,但會繼續在控制檯中顯示錯誤。

我確定有第三種解決方案,也許是第四種解決方案,但這些是我使用的兩種解決方案。

+0

這個方法是在server.js裏面定義的,你的意思是集合嗎? –

+0

這意味着你沒有告訴我們所有人......我看到你更新了這個問題,並且你得到了你的答案,所以我不會更新我的。 – Salketer

相關問題