9

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

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

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

4

3 回答 3

20

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

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

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;
    }
  }
});

更多详情请看我的博文。我会尽力保持最新。

于 2013-08-13T21:43:38.190 回答
0

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

    Accounts.registerLoginHandler(function(loginRequest) {
        控制台日志(登录请求)
        var userId = null;
        var username = loginRequest.username;
        // 我不确定 METEOR 密码是如何散列的...
        // 所以你需要在这方面做更多的研究
        // 但是让我们假设你现在拥有它
        var 密码 = loginRequest.password;

        var user = Meteor.users.findOne({
            $和:[
                {用户名:用户名},
                {密码:密码}
            ]
        });
        如果(!用户){
            // 错误
        } 别的 {
            // 已验证
        }
    });

然后你可以像这样从客户端调用这个函数:

    // 以某种方式获取用户名和密码
    var loginRequest = {用户名:用户名,密码:密码};

    Accounts.callLoginMethod({
        方法参数:[登录请求]
    });

我在 github 上有一个用于不同目的的项目,但您可以了解它的结构:https ://github.com/534N/apitest

希望这可以帮助,

于 2013-08-13T19:37:32.843 回答
0

我发现验证用户密码的最佳方法是使用Accounts.changePassword命令并传递相同的密码oldnew密码。https://docs.meteor.com/api/passwords.html#Accounts-changePassword

Accounts.changePassword(this.password, this.password, (error) => {
  if(error) {
    //The password provided was incorrect
  }
})

如果提供的密码错误,您将得到一个错误返回并且用户密码不会被更改。

如果密码正确,用户密码将更新为当前设置的密码。

于 2022-01-17T09:13:01.497 回答