Javascript 验证Meteor中的用户密码

Javascript 验证Meteor中的用户密码,javascript,passwords,meteor,user-accounts,meteorite,Javascript,Passwords,Meteor,User Accounts,Meteorite,用户可以在我的应用程序中执行一些不可逆转的操作。为了增加安全级别,我想验证执行此类操作的人实际上是登录用户。我怎样才能做到呢 对于有密码的用户,我希望有一个提示,要求再次输入用户密码。我以后如何验证此密码,而不通过网络发送 通过外部服务登录的用户是否可以执行类似操作?如果是,如何实现 我以前没有这样做过,但我认为您的服务器上需要类似的东西 Accounts.registerLoginHandler(function(loginRequest) { console.log(log

用户可以在我的应用程序中执行一些不可逆转的操作。为了增加安全级别,我想验证执行此类操作的人实际上是登录用户。我怎样才能做到呢

  • 对于有密码的用户,我希望有一个提示,要求再次输入用户密码。我以后如何验证此密码,而不通过网络发送

  • 通过外部服务登录的用户是否可以执行类似操作?如果是,如何实现


我以前没有这样做过,但我认为您的服务器上需要类似的东西

Accounts.registerLoginHandler(function(loginRequest) { console.log(loginRequest) var userId = null; var username = loginRequest.username; // I'M NOT SURE HOW METEOR PASSWORD IS HASHED... // SO YOU NEED TO DO A BIT MORE RESEARCH ON THAT SIDE // BUT LET'S SAY YOU HAVE IT NOW var password = loginRequest.password; var user = Meteor.users.findOne({ $and: [ {username: username}, {password: password} ] }); if(!user) { // ERROR } else { // VERIFIED } }); Accounts.registerLoginHandler(函数(loginRequest){ console.log(loginRequest) var userId=null; var username=loginRequest.username; //我不知道METEOR密码是怎么散列的。。。 //所以你需要在这方面做更多的研究 //但假设你现在拥有它 var password=loginRequest.password; var user=Meteor.users.findOne({ 美元及:[ {username:username}, {密码:密码} ] }); 如果(!用户){ //错误 }否则{ //证实 } }); 然后您可以从客户端调用此函数,如下所示:

// FETCH THE USERNAME AND PASSWORD SOMEHOW var loginRequest = {username: username, password: password}; Accounts.callLoginMethod({ methodArguments: [loginRequest] });
Template.userAccount.events({
  'click #check-password': function() {
    var digest = Package.sha.SHA256($('#password').val());
    Meteor.call('checkPassword', digest, function(err, result) {
      if (result) {
        console.log('the passwords match!');
      }
    });
  }
});
//以某种方式获取用户名和密码 var loginRequest={用户名:用户名,密码:密码}; Accounts.calllogin方法({ 方法参数:[登录请求] }); 我在github上有一个不同用途的项目,但您可以了解它的结构:


希望这有帮助,

我可以帮助回答第一个问题。在撰写本文时,meteor没有
checkPassword
方法,但您可以这样做:

在客户端,我假设您有一个表单,其中有一个名为
password
的输入和一个名为
checkpassword
的按钮。事件代码可能如下所示:

// FETCH THE USERNAME AND PASSWORD SOMEHOW var loginRequest = {username: username, password: password}; Accounts.callLoginMethod({ methodArguments: [loginRequest] });
Template.userAccount.events({
  'click #check-password': function() {
    var digest = Package.sha.SHA256($('#password').val());
    Meteor.call('checkPassword', digest, function(err, result) {
      if (result) {
        console.log('the passwords match!');
      }
    });
  }
});
然后在服务器上,我们可以实现如下的
checkPassword
方法:

Meteor.methods({
  checkPassword: function(digest) {
    check(digest, String);

    if (this.userId) {
      var user = Meteor.user();
      var password = {digest: digest, algorithm: 'sha-256'};
      var result = Accounts._checkPassword(user, password);
      return result.error == null;
    } else {
      return false;
    }
  }
});

有关更多详细信息,请参阅我的。我会尽最大努力使它保持最新。

您需要一个安全系统。从这里开始:这完全无关。我已经安装了一个可以工作的应用程序,上面安装了帐户密码。我不想创建一个完整的安全系统,我只想验证已经登录的用户。我想使用它,但由于它依赖于未记录的内部,这让我有点不安。你是在生产应用程序中使用它吗?我是在生产应用程序中使用它,你对此感到不安是对的-我当然会。我现在正在尝试它,我得到一个“TypeError:无法读取未定义的属性'Client'。它看起来像Meteor。_srp在最新的Meteor中未定义:(感谢您不断更新此答案,@David。我希望最终我们能够找到一种独立于版本的方法来完成此操作。@David Eldon它不起作用(版本1.4)。尽管当前密码正确,但始终使用不正确的密码