用户可以在我的应用程序中执行一些不可逆转的操作。为了增加安全级别,我想验证执行此类操作的人实际上是登录用户。我怎样才能实现它?
对于有密码的用户,我想要一个提示,要求再次输入用户密码。我以后如何在不通过网络发送的情况下验证此密码?
通过外部服务登录的用户是否可以执行类似的操作?如果是,如何实现?
用户可以在我的应用程序中执行一些不可逆转的操作。为了增加安全级别,我想验证执行此类操作的人实际上是登录用户。我怎样才能实现它?
对于有密码的用户,我想要一个提示,要求再次输入用户密码。我以后如何在不通过网络发送的情况下验证此密码?
通过外部服务登录的用户是否可以执行类似的操作?如果是,如何实现?
第一个问题我可以帮忙。在撰写本文时,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;
}
}
});
更多详情请看我的博文。我会尽力保持最新。
我以前没有这样做过,但我认为你的服务器上需要这样的东西
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
希望这可以帮助,
我发现验证用户密码的最佳方法是使用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
}
})
如果提供的密码错误,您将得到一个错误返回并且用户密码不会被更改。
如果密码正确,用户密码将更新为当前设置的密码。