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