簡體   English   中英

在 Meteor 中驗證用戶密碼

[英]Verify user password in Meteor

用戶可以在我的應用程序中執行一些不可逆轉的操作。 為了增加安全級別,我想驗證執行此類操作的人實際上是登錄用戶。 我怎樣才能實現它?

  • 對於有密碼的用戶,我想要一個提示,要求再次輸入用戶密碼。 我以后如何在不通過網絡發送的情況下驗證此密碼?

  • 通過外部服務登錄的用戶是否可以執行類似的操作? 如果是,如何實現?

我可以為第一個問題提供幫助。 在撰寫本文時,流星還沒有checkPassword方法,但是您可以按照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;
    }
  }
});

有關更多詳細信息,請參閱我的博客文章 我會盡力保持最新狀態。

我以前沒有做過,但是我認為您的服務器上將需要這樣的東西

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

那么您可以像這樣從客戶端調用此函數:

// FETCH THE USERNAME AND PASSWORD SOMEHOW
    var loginRequest = {username: username, password: password};

    Accounts.callLoginMethod({
        methodArguments: [loginRequest]
    });

我在github上有一個用於不同目的的項目,但是您可以了解它的結構: https : //github.com/534N/apitest

希望這可以幫助,

我發現驗證用戶密碼的最佳方法是使用Accounts.changePassword命令並為old密碼和new密碼傳遞相同的密碼。 https://docs.meteor.com/api/passwords.html#Accounts-changePassword

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

如果提供的密碼錯誤,您將得到一個錯誤返回並且用戶密碼不會被更改。

如果密碼正確,用戶密碼將更新為當前設置的密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM